Proxy child descriptor mapping refused when a source fd equals its target (flaky the_public_gate_is_closed… test) #414
Open
opened 2026-11-07 00:22:47 +00:00 by kayg
·
51 comments
No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/infraternal#414
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Flaky unit test in
infraternal-plugin-proxy:supervisor_tests::the_public_gate_is_closed_before_a_child_starts_and_cleared_after_it_stops(crates/plugins/proxy/src/supervisor_tests.rs:1109) intermittently fails withIt passes alone. The crate is unchanged from origin/dev on both branches where it failed.
Occurrences
verify quickonfix-selinux-login-exec@398b57762(compute01, 2026-11-07):122 passed; 1 failed. Log:~claude/.cache/codex-scratch/j311/quick-r2.log, lines ~1955–1999 (#401 comment with the verbatim table). The same test binary (infraternal_plugin_proxy-95927755d08b1130) afterwards, with no rebuild: the test alone 5/5 pass, the whole binary at--test-threads=36/6 pass (123/123).verify fastafter the 2026-11-06 maintenance (#367, comment 83065): same test, same line, same error,122 passed / 1 failed. Log:~claude/j279/evidence/verify-quick-fast-6be7-post-maintenance.log.Likely mechanism (unverified; not fixed here)
infraternal_shim::pty::prepare_proxy_child(crates/infraternal-shim/src/pty.rs:1050) refuses any mapping wheresource < 3 || target < 64 || source == target. The supervisor maps child descriptors starting atFIRST_PROXY_CHILD_FD = 64(crates/plugins/proxy/src/supervisor.rs:42). When ~120 tests run in parallel in one process, fd numbers climb past 64. If the parent's listener for this route happens to be fd 64, the mapping is64 → 64and gets refused as outside policy. That explains why it fails only in loaded parallel runs and never alone.It can also hit production: a busy server process with more than 64 open descriptors could allocate the listener at exactly the target number. If so, this is a real bug, not only a test flake.
Suggested direction (for whoever takes it)
Prove it first: in a test, open descriptors until the next fd is 64, then start a public route. That should fail deterministically. Then either
dupeach source above the highest target before mapping (fcntl(F_DUPFD_CLOEXEC, max_target + 1)), or treatsource == targetas "keep it and clearFD_CLOEXEC" inside the audited child hook. Keep the policy's other refusals.Found by J311. It is not fixed on the #401 branches, per the orchestrator.
A second symptom, probably the same family. On J311's
verify quickforfix-selinux-agent-exec@9c37ce626(compute01, 2026-11-07,~claude/.cache/codex-scratch/j311b/quick-3.log), a different proxy test failed:ENOTDIRfrom the child's working-directory step fits the same descriptor-collision theory: theworking_directoryfd number gets reused or overwritten by a mapped descriptor in the child, sofchdirsees a non-directory. The same test binary (infraternal_plugin_proxy-95927755d08b1130) then passed 4/4 whole-binary runs at--test-threads=3. The proxy crate is unchanged from origin/dev.J341 starting on branch
fix-proxy-fd-414, base3644950b8(origin/dev). Plan: deterministic fd-64 and overlap/cwd reproducers; audit shim/proxy/spawn descriptor moves; fix product mapping; 30 full proxy-binary runs; diagnose dev-02 nf_tables and streaming failure; verify quick on dev-02 then verify fast on compute01, foreground through build-slot. Estimate 3 hours excluding slot queues and full-gate build time. No merge/deploy. Evidence under ~/.cache/codex-scratch/j341/evidence on each build VM. Host package needs will be requested here, not installed.J341 finding, Part B: dev-02 has
/usr/sbin/nft, butls /usr/sbin/iptables*returns ENOENT andcommand -v iptables-nft ip6tables-nftfinds neither.crates/plugins/mesh/src/iptables.rsinvokes absolute/usr/sbin/{iptables-nft,ip6tables-nft}{,-restore}paths, so extending PATH cannot fix it. The sandbox already appends /usr/sbin:/sbin. Request to orchestrator: install Ubuntuiptableshost package (not doing that in this job). I will make missing backend prerequisites explicitly SKIP, preserving real failures when the tools exist. The streaming log shows hashed=false, input_progress=237568, staged_bytes=0 with a 624481-byte payload; investigating whether the bounded-tail fixture blocks before the selected decoder can emit its first block.J341 finding, streaming: the unchanged gate binary reproduces the failure alone on dev-02: 0 passed / 1 failed in 30.05s, input_progress=237568, staged_bytes=0, expected_bytes=624481. Receipt:
~claude/.cache/codex-scratch/j341/evidence/streaming-baseline.log. dev-02 has gzip but no /usr/bin/zstd. A standalone gzip probe with the fixture's deterministic suffix reports compressed_size=299439, no output at prefix_sent=237568, and output available with only one final byte held (gzip-buffer-probe.jsonbeside that log). The fixture held a <64KiB remaining chunk before gzip had enough input to flush its first output. Fixing the fixture to reserve exactly the final byte, preserving the progress-before-tail assertion and leaving the product codec path unchanged. Initial quick precheck caught a missing module doc comment, corrected; red Rust tests await dev-02's slot (quick-red-2.log).J341 deterministic red evidence:
quick-red-2.logon dev-02 has all 3 new isolated regressions failing: listener dup2-pinned to fd64 is refused with InvalidInput/outside policy; swapping 64/65 produces a wrong-listener assertion; cwd pinned at64 overwritten by 65->64 returns ENOTDIR. Suite: 108 passed, 3 failed, 14 ignored. Workspace clippy passed. Product fix stages every source above the largest target before any dup2 and enters cwd before mapping; equal fd mappings become valid and lose CLOEXEC through the temporary copy. Auditing other mappings found isolated inheritance already allocates/owns its slots, readiness starts its source above target4, standard-handle detachment moves the source above2, and POSIX spawn uses its own dup2 file actions. An additional focused probe is queued for private spawn-error-pipe collisions with fixed free destinations. Gate environment fix is committed/pushed at6480869a1; preflight now exits77 with the exact four missing host paths (privileged-dev02-skip.log). compute01 currently has only 18G free against its25G build floor; final fast will need space freed by its running jobs (I will not delete other jobs' targets).J341 additional mapping-path finding: a destination left free in the parent can become Rust Command's private exec-error pipe. Deterministic red fixture fills parent fds through63, maps a source to65, then execs a missing path: the child aborts in Rust's error-pipe write and the parent incorrectly receives an ExitStatus instead of ENOENT. Receipt: dev-02
~/.cache/codex-scratch/j341/evidence/spawn-pipe-red.log(0 passed / 1 failed). The proxy now allocates and owns each destination before constructing/spawning Command; it uses actual allocated fd numbers, with the resource cap based on descriptor count rather than fd value. This follows the existing isolated-inheritance approach and prevents Command from claiming a destination. The shim accepts equal mappings and explicitly clears CLOEXEC on the common all-self-mapped path; mixed/overlapping lists use two-phase high-fd copies. The extra regression now reserves its destination through that same allocator and still requires NotFound from exec. Green quick is queued on dev-02. No dependency or foundational choice changed.J341 checkpoint: pushed
fix-proxy-fd-414at WIP51ba63492(finalize after green checks). All four mapping regressions have red receipts; normal-path destinations are now parent-owned and self-mapped, mixed mappings stage through high fds. Current build target: dev-02~/worktrees/j341/target(2.2G at last check), exactly one target. Green quick retry is foreground-queued inquick-green-2.log; the previous retry stopped on a wrapper-signature fmt mismatch from my file sync, now corrected. Remaining: green quick, focused streaming integration, 30 full proxy runs on compute01 using default test parallelism, real-root proxy proof, final compute01 fast. Baseline cross-reference: J329 #410 comment83499, unmodified devfba745051, 2/12 failed, original receipt ~/j329/proxy-flake.log (copied for this job). Isolated setup benchmark on perf VM through perf-run: 7 alternating rounds x200 real execs; 34-fd median old332701ns/new338595ns (+5894ns), sample ranges overlap; one-fd medians338015ns/328216ns (noise, not a speedup claim). This is a syscall-sequence harness, not whole-product latency. Source: compute01 ~/.cache/codex-scratch/j341/evidence/fd-spawn-cost.c; perf VM ~/j341-fd-cost/{results.log,summary.json,perf-run-.before.txt,perf-run-.after.txt}; copied under code ~/.cache/codex-scratch/j341/evidence/j341-fd-cost/. No steady-state descriptors added: 34 inherited slots remain34 per child, or1700 across50 children; only mixed remaps use temporary high slots before exec. compute01 disk has recovered above its build floor; its queue is still longer than dev-02.J341 progress: finalized and pushed three atomic commits on
fix-proxy-fd-414, head27c74d5f98f1cebae922895e12139b1081c37bed(gate environmentb9db1a2aa; product fd fix69ab78fed; streaming fixture27c74d5f9). dev-02verify quickPASS for infraternal-shim, infraternal-plugin-proxy and infraternal-plugin-ssh; all four fd regressions green. Corrected streaming integration:10 full invocations,0 failures. Receipt~claude/.cache/codex-scratch/j341/evidence/quick-green-3.logendsSTREAMING_SWEEP runs=10 failures=0andJ341_QUICK_STREAMING_EXIT=0; per-run logs streaming-green-{1..10}.log. Receipts copied to code~/.cache/codex-scratch/j341/evidence/dev02/; dev-02 target deleted (free disk43G afterwards). compute01 source is clean at that head; launcher confirmed cargo1.99.0. Foreground final work is queued (position10 at last status) in compute01~/.cache/codex-scratch/j341/evidence/fast.log, with exact unmodified origin/dev static-size measurements before restoring the implementation and running verify fast. Still pending: final fast,30 default-parallelism proxy-binary runs on compute01 against J329's2/12 baseline, and real-root credential-drop proof. No merge/deploy or host package install performed.J341 verification update: compute01 admitted the run at 13:54 IST. The SSH output pipeline disconnected during the unchanged-dev static baseline; the build briefly survived, then exited without a result marker. This is not a gate result. Original receipt: ~claude/.cache/codex-scratch/j341/evidence/fast.log. Requeued the same head with output written directly to fast-resume.log and SSH keepalives, reusing its one existing target directory; no second slot/build is running. Final fast,30 proxy runs and root proof remain pending. No source changes.
J341 queue/disk blocker: retry fast-resume.log has reached queue position2 (one job ahead), but compute01 df now reports16G free against the25G build-slot floor. No code failure or gate result. Please reclaim finished jobs’ targets when safe; I will not delete other jobs’ files. My only compute01 target is ~/worktrees/j341/target, containing the interrupted baseline build for reuse; dev-02 target was already deleted. Current head remains27c74d5f98f1cebae922895e12139b1081c37bed. Continuing foreground wait.
J341 urgent host-capacity update: compute01 reached100% disk use (0 available). I deleted only my own interrupted ~/worktrees/j341/target (1.7G) to relieve immediate pressure; logs/receipts remain outside the checkout. The retry is still queued and cannot enter below the25G floor. Please reclaim finished jobs’ targets when safe. No final fast/proxy30/root result exists yet. Local receipt: ~/.cache/codex-scratch/j341/evidence/compute-disk-block-latest.log.
J341 checkpoint: compute01 capacity recovered; retry admitted at14:38 IST and is actively building the exact unchanged-dev static baseline before restoring fix-proxy-fd-414 for verify fast. Foreground command: build-slot nice -n10 nix develop . -c bash ~/.cache/codex-scratch/j341/compute-gate.sh; direct log ~/.cache/codex-scratch/j341/evidence/fast-resume.log. Final head remains27c74d5f98f1cebae922895e12139b1081c37bed, baseline3644950b8e4b5dddeefba350f97a3892189ca193. One target ~/worktrees/j341/target has been recreated by this admitted run. No final fast/proxy30/root result yet. dev-02 quick and10/10 streaming remain green; dev-02 target absent. Continuing foreground wait; no merge/deploy.
J341 verification milestone: exact origin/dev3644950b8 static baselines completed: x86_64 musl27,787,280 bytes (sha2561ffc5b4deb3c9940e9cecfac0037bc15aa14e51e18c1d403450d3dfb2eb07360), aarch64 musl25,000,776 bytes (sha256596696ec38f08fd53b3016bcaa240ecda91381f63ee17233148d2666bda66c23). Receipt compute01 ~/.cache/codex-scratch/j341/evidence/baseline-static.json. Script restored final head27c74d5f98f1cebae922895e12139b1081c37bed and verify fast is running in the foreground (fast-resume.log). Artifact/migration rows have passed; no final gate result yet. Proxy30 and fresh-root proof still pending. One target ~/worktrees/j341/target; no merge/deploy.
J341 checkpoint: final compute01 verify fast is in the workspace test row. CLI compile-out, workspace clippy and intervening fixture checks completed without reported failures; completed test batches so far report zero failures. Full receipt is still being written to ~/.cache/codex-scratch/j341/evidence/fast-resume.log; no final gate result yet. Both exact-dev static baselines are recorded in baseline-static.json. Head remains27c74d5f98f1cebae922895e12139b1081c37bed, one target ~/worktrees/j341/target. Next: remaining gate rows,30 default-parallelism proxy runs in this same slot, then release/clean the target and perform the fresh-root proof. No merge/deploy.
J341 gate finding: workspace install integration binary finished96 passed /9 failed /2 ignored in303.03s. Streaming regression PASSED. Failing cleanup/recovery tests report synthetic remote exit73, SetupRunning assertions, or two300s timeouts. Full trace: compute01 ~/.cache/codex-scratch/j341/evidence/fast-resume.log (failure sections after install binary). Fast is continuing its remaining rows; this is not a green gate. Next slot will run the required30 full proxy binaries on the fix, then rebuild recovery-helper and the full install integration binary on exact unmodified origin/dev3644950b8 to prove or disprove the unrelated baseline failure. No code change in response yet.
J341 gate receipt, verification still in progress. Final head27c74d5f98f1cebae922895e12139b1081c37bed. compute01 fast EXIT1: only the workspace test row failed (SSH install96 passed/9 failed/2 ignored); privileged integration101/101 and both static targets passed. TypeScript phase did not run after the Rust failure. Exact slice deltas vs origin/dev3644950b8: x86_64+512 bytes (27,787,792); aarch64+640 bytes (25,001,416). Receipts copied to code ~/.cache/codex-scratch/j341/evidence/compute01/{fast-resume.log,fast-summary.txt,baseline-static.json,static-delta.json}. Required proxy30 and exact-dev install reproduction are foreground queued in compute01 supplement.log; fresh-root proof follows. Removed only completed release artifacts and unrelated test executables from my target to restore disk admission capacity; remaining one target ~/worktrees/j341/target. No merge/deploy. Verbatim gate table:
J341 host-capacity blocker recurred after fast completed: compute01 now9.9G free, below25G admission floor. Proxy30 + exact-dev SSH install reproduction are still foreground queued at position2 in supplement.log. I pruned my completed release artifacts and251 unrelated test executables; remaining target is12G of required proxy/SSH caches at ~/worktrees/j341/target. Please reclaim finished jobs’ targets when safe. Root proof will follow only after this one slot run finishes and my normal target is deleted. Gate receipt and full table are in comment84281; no new code changes.
J341 proxy requirement complete:30 full default-parallelism proxy test-binary runs,0 failures,123 passed per run on16 CPUs, RUST_TEST_THREADS unset. Compare J329’s unmodified-dev2/12 failure baseline (#410 comment83499). Head27c74d5f98f1cebae922895e12139b1081c37bed. compute01 proxy-sweep.json + proxy-full-{1..30}.log; copied to code ~/.cache/codex-scratch/j341/evidence/compute01/. Important gate follow-up: standalone install binary on exact unmodified dev3644950b8 passed105/105 (2 ignored), baseline-install.log. This DOES NOT prove the9 full-gate SSH failures are unrelated. Comparing the original gate executable and unchanged-dev workspace feature resolution next in install-context.log. Root proof remains pending; no final handoff yet.
J341 gate investigation update: original full-gate install executable passed105/105 after rebuilding its helper (context-head-install.log); exact unchanged dev3644950b8 with workspace feature resolution also passed105/105 (context-base-install.log), same install-c34091ccce3082f2 target. Nine earlier failures are NOT reproduced on baseline, so I am not classifying them as unrelated. Context/helper hashes are in install-context.log, copied to code evidence/compute01/. Rebased the same three atomic commits onto current devaf033d0b4 (SELinux/UI merges); pushed new headf7536682b37b8242ef0c427b020f9ca6b75b7d23. Fresh quick on dev-02 is foreground queued in quick-rebased.log; fresh final fast and proxy30 on this head follow on compute01, then root proof. Prior0/30 proxy result and +512/+640-byte static measurements remain historical receipts for head27c74d5f9 against original base3644950b8. No patch changed during rebase; no merge/deploy.
J341 rebased verification: dev-02 quick PASS onf7536682b37b8242ef0c427b020f9ca6b75b7d23, compared againstaf033d0b4. Receipt quick-rebased.log ends J341_REBASED_QUICK_EXIT=0; copied to code evidence/dev02/. dev-02 target deleted (74G free afterwards). Fresh compute01 quick+fast+proxy30 is now foreground running in ~/.cache/codex-scratch/j341/evidence/fast-rebased.log; exact launcher cargo1.99.0 and script syntax checked before admission. One remaining target ~/worktrees/j341/target. Fresh root clone already matches this head; proof follows after compute verification and normal-target cleanup. Prior failed fast remains recorded, not reclassified as a baseline failure. No new source changes, merge or deploy.
J341 fresh-gate checkpoint onf7536682b: dev-02 quick and compute01 quick PASS. Fresh workspace test row completed without reported failures; install integration105 passed /0 failed /2 ignored, including streaming. The earlier9 install failures remain an unreproduced historical gate failure, not a proven dev baseline defect. Compute01 is now in shim process-per-user; privileged/static/TypeScript rows and fresh-head proxy30 still pending. Foreground log ~/.cache/codex-scratch/j341/evidence/fast-rebased.log. One target ~/worktrees/j341/target; dev-02 target deleted. Root clone/launcher ready on the same head; no root build yet, no merge/deploy.
J341 checkpoint onf7536682b: fresh workspace tests, process-per-user shim suite, lint/doc rows and privileged integration all completed without reported failures. x86_64 static checks passed at27,792,496 bytes; aarch64 static build is still active. Final fast result, TypeScript, fresh-head proxy30 and real-root proof are still pending. Foreground log compute01 ~/.cache/codex-scratch/j341/evidence/fast-rebased.log. One target ~/worktrees/j341/target. dev-02 quick passed and its target is deleted. No source changes, merge or deploy since the rebase.
J341 final verification milestone: fresh verify fast PASS (VERIFY_EXIT=0, all24 Rust rows PASS and TypeScript completed) onf7536682b37b8242ef0c427b020f9ca6b75b7d23. Fresh-head proxy sweep30/30 full binaries PASS,123 tests/run, default16-CPU parallelism,0 failures. Current receipts copied to code ~/.cache/codex-scratch/j341/evidence/compute01-rebased/{fast-rebased.log,fast-summary.txt,proxy-sweep.json,proxy-full-1.log..proxy-full-30.log,rebased-static.json}. Normal compute target deleted; no remaining executable under that target was found (normal-cleanup.log). Fresh real-root proof is now foreground queued/running via scripts/root-slot-hold in /root/j341-proxy-proof, same head; root log /root/j341-root-proof.log. It builds root-owned artifacts with4 jobs and debug symbols disabled, runs four fd regressions plus the exact parent-death-signal credential-drop test. Root proof and cleanup remain pending; no merge/deploy.
J348 independent correctness review starting. Review branch review-j348, implementation head
f7536682b3, baseaf033d0b4; current origin/dev21b3c84ced. Plan: audit every shim/proxy/spawn mapping and gate-environment diff, reproduce deterministic reds on unmodified dev and greens on head on dev-02, then 10 full proxy runs. Estimate 60 minutes of active review excluding slot/build waits. No merge, deploy or push. Reviewer exception in common brief: focused tests only, author fast receipt will be inspected. Evidence will be under ~/.cache/codex-scratch/j348/evidence on dev-02 and copied to control host.J341 root-proof queue checkpoint: final head
f7536682b3remains unchanged. Dev-02 quick, compute01 fast and current-head30/30 proxy runs all passed (receipts in comment84500). The required fresh root-owned proof has waited about18 minutes and is first in the compute01 build-slot queue. No proof test has run yet; foreground wait remains active. Normal compute01/dev-02 targets are deleted. No extra builds queued, merge, deploy, or host package install. Root log /root/j341-root-proof.log; root clone /root/j341-proxy-proof will be deleted after the proof.J348 verdict: REQUEST CHANGES
Reviewed
fix-proxy-fd-414atf7536682b3, merge baseaf033d0b4. Rechecked the remote branch before posting: the head is unchanged. These two findings are pre-existing gaps in the audited proxy boundary, not regressions introduced by J341's remapping algorithm. They fail the explicit no-unmapped-fds / no-post-fork-allocation requirements of this review.P1: unrelated inheritable parent descriptors still reach the proxy child.
spawn_proxy_command(supervisor.rs:879–887) callsprepare_child_without_control,prepare_parent_bound_child, thenprepare_proxy_child. The first only marks fd3 CLOEXEC (pty.rs:1515–1530); the mapping hook never establishes an allowlist. An unrelated descriptor without CLOEXEC therefore survives exec, potentially carrying a server file/socket capability across the proxy identity boundary. My isolated test creates such a descriptor withF_DUPFD(200), reserves one legitimate proxy descriptor, uses the exact production callback order, and verifies both the legitimate descriptor and the unwanted one in an exec'd Python process. It deterministically fails withunmapped parent descriptor survived proxy exec. Install the existingonly_standard_descriptors/ publicinherit_only_standard_descriptorshook before admitting the mapped set; preserve the spawn-error pipe by marking rather than prematurely closing it.Evidence:
review-mapping-tests.log: 5 passed / 1 failed;unmapped-leak.loghas the isolated failure. Failing test:proxy_exec_excludes_unmapped_inheritable_descriptorsonreview-j348.P2: owner-mismatch failures allocate inside pre_exec.
pty.rs:1159constructsio::Error::other("proxy owner exited before child startup")after fork; the earlier parent-bound hook does the same at line1030. This allocates a boxed custom error and can deadlock on allocator state inherited from another parent thread. The success path's preallocated Vec and integer-only remapping are safe, but that does not cover the error path. Use an allocation-free error representation, such asio::Error::from_raw_os_error, in both hooks. My guarded-global-allocator test uses a nested fork solely to deterministically force the actual product hook's owner-mismatch branch while keeping its immediate parent alive. The allocator writes a syscall-only marker and exits99 if called after fork. It emitsJ348_POSTFORK_ALLOCATION_IN_PROXY_OWNER_ERRORand the test fails, 0 passed / 1 failed, inpostfork-alloc-test.log. This is a forced branch probe, not a claim to have reproduced an allocator deadlock in a running server.Reproducers are committed and pushed only to review-j348, commit
1dd3c32e4. No product changes, merge, deployment, or push to dev. No P3 findings.What passed:
21b3c84ced, with only the author's first three test fixtures overlaid, produced 0 passed / 3 failed: pinned fd64 outside-policy refusal, wrong swapped listener, and ENOTDIR for overwritten cwd (dev-red.log). The fourth old-path reproducer was adapted to use the original unreserved numeric target because dev has no reservation API; it aborted in Rust's error-pipe write and returned ExitStatus instead of ENOENT (dev-spawn-pipe-red.log). All four author regressions pass on the exact review head (head-green.log).proxy-sweep.txt,proxy-full-1.logthroughproxy-full-10.log). This supplements J341's30/30 current-head compute01 receipt; it does not replace it or imply a statistical guarantee.host-frontends.log). The real preflight exits77 and prints those exact paths plus the package remedy (gate-env-preflight.log). The reason is honest, and the summary does not claim PASS. It skips the entire selected privileged row (install, mesh, proxy, shim), so this gives no privileged coverage on dev-02. Its fixture suite passed60 tests (gate-env-tests.log). Host packages were not installed.All heavy commands ran on dev-02 through build-slot with CARGO_INCREMENTAL=0, jobs3, one target. Exact launcher
nix develop ~/worktrees/j348 -c cargo --versionsucceeded before queueing. Both VM slot statuses were checked. My target and temporary state directory have been deleted; all review runs have ended.Reviewer instruction in BRIEF-COMMON forbids rerunning quick/fast. I independently read the author's exact-head gate receipt, rather than rerunning it. Source: control host
~/.cache/codex-scratch/j341/evidence/compute01-rebased/{fast-summary.txt,fast-rebased.log}. Verbatim author gate table and terminal markers:The author's separate fresh real-root proof was still queued in comment84540; I do not claim it passed. My review tests are deliberately red for the two findings and are not a green product gate.
Evidence bundle:
~/.cache/codex-scratch/j348/j348-review-evidence.tar.gzon control host and dev-02; individual logs/source/launchers under~/.cache/codex-scratch/j348/evidence/on both. Bundle attached below.REQUEST CHANGES — head
f7536682b3.J341 implementing J348 comment84548 on fix-proxy-fd-414, base/head
f7536682b3. Both findings confirmed in source. Imported review-j348 fixtures only; red runs precede product edits. Plan: red reproductions; allowlist plus allocation-free errors; audit shim/session spawn hooks; dev-02 quick then compute01 fast, refreshed proxy sweep and root proof. Estimate45-75min execution plus shared slot waits. Superseded old-head root proof was terminated by its recorded process group97454; no test result claimed. Root-owned target retained solely for refreshed root proof, normal targets remain deleted.J341 spawn audit for J348 follow-up, still on
f7536682bproduct code:Imported failing tests are queued red-first on dev-02; product code is unchanged. Old-head root build was stopped; root-owned target is retained for the refreshed proof only.
J341 red evidence for J348 findings: unchanged
f7536682bproduct plus review fixtures failed deterministically on dev-02. Descriptor leak:0 passed/1 failed, AssertionError unmapped parent descriptor survived proxy exec. Guarded allocator extended to each hook:0 passed/2 failed, both emitted J348_POSTFORK_ALLOCATION_IN_PROXY_OWNER_ERROR and exited99. Both cargo invocations exit101. Receipts on control ~/.cache/codex-scratch/j341/evidence/dev02/{review-fd-red.log,review-alloc-red.log}. Product now establishes the existing only_standard_descriptors policy inside prepare_proxy_child before mapping; both owner-mismatch errors return raw ESRCH without allocation. Six mapping tests and both allocator probes, then verify quick, are foreground queued on dev-02. No new head until validation.J341 review fixes pushed: head9c1b545f425a567d29dd4babde014209a10b5853, branch fix-proxy-fd-414, rebased onto dev21b3c84ceddd571e1580f679009860e32b37beb9. Atomic review commits
c93adef42(descriptor allowlist) and9c1b545f4 (allocation-free owner errors). Six mapping regressions PASS; both guarded allocator regressions PASS. First quick stopped on missing D345 documentation for the touched pre-existing parent helper; doc added. Receipt dev02/review-green-quick-doc-fail.log. Fresh exact-head quick is foreground queued on dev-02, then compute01 fast/root and refreshed30-run sweep. Auxiliary spawn gaps are explicitly listed in comment84570. No merge/deploy. VM branch sync uses public direct fetch because its origin is a local mirror missing the job branch; premature queue was stopped before execution and no result claimed.J341 current head454431e5479206a328aa61b97ac41e634db25b90 pushed on fix-proxy-fd-414. Dev-02 verify quick PASS: workspace clippy and changed-package tests PASS, J341_REVIEW_QUICK_EXIT=0 and launcher exit0. Six mapping regressions and both allocator probes PASS on this exact head. Receipt control ~/.cache/codex-scratch/j341/evidence/dev02/review-final-quick.log. Imported fixture lint corrections (fallible setup returns Result, explicit raw pointer) are folded into the atomic allocation-error commit. The preceding clippy failure remains in review-final-quick-first.log. Dev-02 target deleted (review-dev02-cleanup.log). Required compute01 quick+fast and refreshed30-run sweep are now foreground queued through the checked launcher; log compute01 ~/.cache/codex-scratch/j341/evidence/review-fast.log. Both VM slot statuses checked; dev-02 is free, but compute01 is explicitly required for this gate. Root proof follows after normal target cleanup. No merge/deploy/host package install.
J341 queue checkpoint on454431e5479206a328aa61b97ac41e634db25b90: dev-02 quick/focused checks passed and its target is deleted (comment84606). Required compute01 quick+fast has waited about14min, advancing from queue position7 to3 at the latest status. Foreground SSH wait remains active; log ~/.cache/codex-scratch/j341/evidence/review-fast.log. No fast result yet on this head. Root clone is pinned to the same head, no root job queued and no root target remains. Normal compute target will be the only J341 target on that VM; cleanup precedes the separate root proof. No source changes since the fixture lint amendment, no merge/deploy.
J341 verification checkpoint: unchanged pushed head454431e5479206a328aa61b97ac41e634db25b90. Dev-02 quick and all focused review regressions passed; no dev-02 target remains. Required compute01 gate has waited about33min and is queue position3 at latest status, foreground session still active. No fast result yet for this head, no root job queued, no root target retained. Receipts and exact run state remain ~/.cache/codex-scratch/j341/evidence/ and ~/.cache/codex-scratch/j341/REVIEW-HANDOFF.md on control; gate log compute01 ~/.cache/codex-scratch/j341/evidence/review-fast.log. No code changes, merge, deploy or package install since84606.
J341 active-gate checkpoint: head454431e5479206a328aa61b97ac41e634db25b90 acquired compute01 slot1/5 after about49min waiting. Exact head/base21b3 confirmed in review-fast.log. Compute01 quick has passed workspace checking and is building changed-package test binaries; the quiet section is active vendored OpenSSL compilation, confirmed from the J341 process tree. No current-head fast result yet. Dev-02 quick/focused regressions passed, its target is deleted, root proof remains unqueued with no root target. Normal compute target ~/worktrees/j341/target is the only target on that VM. No source changes, merge/deploy or host package install. Foreground log ~/.cache/codex-scratch/j341/evidence/review-fast.log.
J341 gate checkpoint on454431e5479206a328aa61b97ac41e634db25b90: compute01 quick PASS; full verify fast is in workspace integration tests. SSH install binary install-bdcbdaaca1745741 passed107/0failed/2ignored, including streaming::decoded_image_and_hash_advance_before_the_transfer_tail_is_released. Both reported proxy supervisor tests passed in quick and the workspace run. No FAILED test-result summary seen in the inspected workspace output. Remaining fast rows/static/TypeScript, refreshed30-run sweep and separate root proof are still pending. Foreground log ~/.cache/codex-scratch/j341/evidence/review-fast.log. One normal target ~/worktrees/j341/target; no root/dev02 target. Earlier pre-rebase9-install-failure history remains unreproduced, not claimed as a repaired baseline defect. No source changes or merge/deploy.
J341 gate milestone on454431e5479206a328aa61b97ac41e634db25b90: workspace tests finished without a failed test summary; fd leak regression and both guarded allocator probes PASS in workspace. SSH install107/0failed/2ignored including streaming. Process-per-user row completed; privileged integration now101/101 PASS (403s receipt), including nf_tables coverage on compute01. Fast is entering probe release exclusion, then static builds/TypeScript. Final gate status, fresh30-run sweep and real-root proof remain pending. Foreground log ~/.cache/codex-scratch/j341/evidence/review-fast.log. One normal target, no root/dev02 target; no source changes, merge/deploy or package install.
J341 static checkpoint on454431e5479206a328aa61b97ac41e634db25b90: x86_64 static checks passed, PT_INTERP absent,size receipt is27802000 bytes (27,802,000). Aarch64 static compilation is active; no final fast result yet. Workspace and101/101 privileged integration passed as recorded in84774; current SSH install107/0failed/2ignored. Fresh-head30-run sweep follows the gate, then normal target cleanup, added-allowlist syscall benchmark and separate real-root proof. Foreground log ~/.cache/codex-scratch/j341/evidence/review-fast.log; unchanged source/head, one normal target, no merge/deploy.
J341 finding: exact head
454431e547completed compute01 verify fast with VERIFY_EXIT=0, after dev-02 quick passed. The following proxy sweep passed runs 1–3 and failed run 4 (122 passed, 1 failed): a_holder_that_is_not_an_installed_traefik_is_named_in_the_error. Its fixture shell reportedexec: .../other-program: Text file busybefore supervisor evaluation. This fixture is byte-for-byte unchanged from dev (zero-byte foreign-holder-fixture-diff.patch). No existing test edited. Initial 1/4 failed-run receipt retained in /home/kayg/.cache/codex-scratch/j341/evidence/compute01-review-initial/; full gate and failure in review-fast-sweep-failure.log. Retrying 30 full binary invocations with default parallelism, keeping this failure visible. Root proof and added-allowlist cost measurement remain pending.J341 checkpoint: the unchanged-code retry acquired compute01 slot3 after about29min and has passed14 full proxy binaries so far at454431e5479206a328aa61b97ac41e634db25b90, default parallelism, RUST_TEST_THREADS unset. Current remote receipt: /home/claude/.cache/codex-scratch/j341/evidence/review-sweep-retry.log. Earlier ETXTBSY fixture failure remains preserved and reported in84833. Root proof is prepared separately; launcher cargo1.99.0 checked. Its TMPDIR is /tmp because Nix’s default root-only0700 temporary parent would prevent the dropped proxy identity from traversing the fixture, independent of the product boundary. No repository test changes.
J341 finding: current-head retry completed30/30 full proxy binaries,123 passed/0 failed/0 ignored each, default parallelism and RUST_TEST_THREADS unset. Receipt: /home/kayg/.cache/codex-scratch/j341/evidence/compute01-review/{proxy-sweep.json,proxy-full-1..30.log,review-sweep-retry.log}, SWEEP_RETRY_EXIT=0. Including the earlier ETXTBSY fixture batch, current-head total is33 passing runs plus1 failing run, not0 failures/34. J329 baseline remains2 failed/12. Added-allowlist cost measured on perf VM through perf-run:7 alternating rounds ×200 real execs/variant, at34fds previous/allowlist median337201/345462ns (+8261ns), overlapping ranges333933–349226/333813–351018ns; at1fd341044/335947ns. Isolated syscall/exec harness only, no whole-product latency claim;0 steal, PERF_EXIT=0. Receipts: evidence/review-fd-cost/{results.log,summary.json,before/after host snapshots}; source review-fd-spawn-cost.c. Normal targets removed on both VMs; perf binary removed. Root-owned exact-head proof is now separately queued through root-slot-hold, no other J341 build running.
J341 review follow-up, branch
fix-proxy-fd-414, head454431e5479206a328aa61b97ac41e634db25b90(pushed). No merge/deployment/host package changes.P1: Linux proxy preparation now establishes the existing standard-descriptor allowlist before admitting mapped fds. It marks CLOEXEC rather than closing Command’s exec-error pipe. Imported J348 leak/permutation regressions pass. P2: both owner-mismatch hooks return raw ESRCH without allocating. Guarded-allocator probes force each hook independently and pass. Atomic commits:
c93adef424and454431e547.Red-first evidence: dev02/review-fd-red.log (0 passed, 1 failed: unrelated FD200 survives); dev02/review-alloc-red.log (0 passed, 2 failed, allocation marker and exit 99). Exact-head quick: dev02/review-final-quick.log, J341_REVIEW_QUICK_EXIT=0 and J341_REVIEW_QUICK_LAUNCH_EXIT=0; six mapping checks and both allocator probes pass.
Compute01 full fast: review-fast-sweep-failure.log, VERIFY_EXIT=0. Privileged integration: 101/101; SSH install: 107 passed, 0 failed, 2 ignored including streaming. Static bytes: x86_64 27,802,000; aarch64 25,009,992; both PT_INTERP absent. Current hashes: compute01-review-initial/review-static.json. Historical original-slice +512B/+640B size deltas were measured against the original base, not this rebased head.
Sweep: J329 unchanged-dev baseline: 2 failed runs/12. Previous f753 head: 30/30 passed. Current-head initial batch: 3 passes then 1 failure: unchanged holder fixture’s exec returned ETXTBSY before supervisor evaluation, 122 passed / 1 failed. Preserved in compute01-review-initial/proxy-full-1..4.log and zero-byte foreign-holder-fixture-diff.patch; not hidden or claimed fixed. Retry: 30/30 passed, 123 tests/run, 0 ignored, default parallelism, RUST_TEST_THREADS unset. Total across the two current-head batches: 33 passing runs and 1 failing run, not 0/34. Receipts: compute01-review/proxy-sweep.json, proxy-full-1..30.log, review-sweep-retry.log (SWEEP_RETRY_EXIT=0).
Dev-02 preflight: /usr/sbin/nft exists and PATH includes sbin, but all four iptables-nft/ip6tables-nft binary/restore frontends are missing. SKIP77 reports the missing host frontends honestly. Host iptables package install remains requested from orchestrator; none installed. dev02/review-host-frontends.log reconfirms absence. Streaming fixture now holds the final compressed byte, preserving real early decode/hash/staging checks; historical 10/10 complete streaming invocations passed, and current full gate passes it.
Other spawn paths: main PTY/session launch already allowlist. Additional pre-existing gaps are explicitly listed, not fixed: sessions::isolated manager/systemctl, startup_guard::execute, restart Image::probe, shim loginctl discovery/termination, embedded POSIX spawn, and general signal-only prepare_child consumers in lifecycle/install/remote/ssh. No other owner-mismatch allocating pre_exec errors found. Audit: comment 84570 and spawn-audit.md.
Real-root proof passed on the exact head: uid 0 with full host uid/gid maps; six mapping regressions, both guarded-allocator probes, and the exact credential-drop parent-death test passed. J341_ROOT_PROOF_EXIT=0 and ROOT_SLOT_EXIT=0. Nix’s root-only temporary parent was avoided by setting TMPDIR=/tmp in the proof launcher. Receipts: review-root-proof.log, review-root-proof.sh, review-root-host-identity.log, review-root-launcher.log.
Performance: isolated syscall/real-exec harness on perf VM via perf-run, 7 alternating rounds x 200 spawns/variant, 1 and 34 descriptors. Previous/allowlist medians: 341044/335947 ns at 1 fd; 337201/345462 ns at 34 fds (+8261 ns). Ranges overlap (34 fds: previous 333933–349226 ns; allowlist 333813–351018 ns); this is not a whole-product latency measurement. Host snapshots show 0 steal; PERF_EXIT=0. Artifacts: review-fd-cost/{results.log,summary.json,perf-run-.before.txt,perf-run-.after.txt}, source review-fd-spawn-cost.c. The added close_range(CLOEXEC) enforces capability isolation; no speedup claim.
Normal targets removed on both VMs (review-dev02-cleanup.log, review-compute-cleanup.log); perf binary removed (review-perf-cleanup.log). Root clone, script and target removed; proof log retained (review-root-cleanup.log). All J341 executions and copies have ended. Control worktree is clean; public branch head confirmed equal to the full SHA above.
All evidence is under /home/kayg/.cache/codex-scratch/j341/evidence/. Verbatim current gate table:
Verbatim terminal receipts:
The current fast log also ends its protocol suite with:
The refreshed sweep/performance summaries and the earlier failing fixture log are attached to comment 84867. Remaining follow-ups: orchestrator-owned host package install for dev-02; listed auxiliary spawn gaps; unresolved ETXTBSY fixture-exec failure. No existing supervisor test was patched to obtain the passing sweep.
J352 independent correctness review starting. Review target fix-proxy-fd-414 @
454431e547; current origin/dev6b1bdb81b3. Plan: inspect delta and all post-fork paths; run J348 red/green regressions on dev-02 through a checked build-slot launcher; investigate holder ETXTBSY against unchanged dev; rank auxiliary spawn gaps and post verdict. Estimate 90 minutes execution plus slot waits. No code fixes, push, merge or deploy; focused review tests only per common brief.J352 findings checkpoint: independent dev-02 red/green completed through checked build-slot launcher. Current origin/dev
6b1bdb81b: leak test 0 passed/1 failed (unmapped inheritable fd survives), guarded owner probes 0 passed/2 failed with J348 allocation marker. Exact head454431e547: all six mapping checks pass (including ENOENT error-pipe check), both owner probes pass; expanded allocator guard also passes full production callback chain on self/mixed-map success, ENOTDIR cwd, EBADF cgroup writer, and invalid source/self-map errors. Baseline lacks reservation API, so only its leak fixture uses a parent-occupied distinct target64; production callbacks unchanged. Controlled writer-fork probe produces ETXTBSY on BOTH versions despite FD_CLOEXEC=1; exec succeeds after the sibling exec releases the write description. This establishes the pre-existing mechanism, not its statistical frequency. No missing-CLOEXEC product writer established. Original supervisor fixture has empty dev/head diff. Evidence on control and dev-02 under ~/.cache/codex-scratch/J352/evidence/{dev-fd-red,dev-alloc-red,head-fd-green,head-alloc-green,head-expanded-alloc,dev-writer,head-writer}.log; source/launchers retained in parent directory. All four iptables-nft frontends exist now (host-frontends.log); selected privileged row is running separately, no skip/pass claim yet. Author exact-head fast receipt independently inspected: VERIFY_EXIT=0.J352 verdict: APPROVE for
fix-proxy-fd-414at454431e5479206a328aa61b97ac41e634db25b90. Both requested fixes are correct. No remaining blocker found in the proxy descriptor/remapping or owner-error changes. Current dev used for independent reds:6b1bdb81b3d8eb90716643e7d1bd03f61ce37827; merge base21b3c84ceddd571e1580f679009860e32b37beb9.close_range(CLOEXEC)and its stack-only/proc/self/fdfallback mark rather than close descriptors. Thus Command's private exec-error pipe remains usable on failure and disappears on successful exec. Parent-owned destination slots prevent the mappings from overwriting it. Self maps clear CLOEXEC; mixed mappings stage all sources before overwriting any destination, then close the temporary copies. Sources/cwd/cgroup fds remain CLOEXEC unless explicitly mapped. After exec the surviving set is stdio plus the admitted set.Independent dev-02 checks, through build-slot with CARGO_INCREMENTAL=0 and jobs3, exact launcher checked with cargo --version:
The baseline lacks reserve_proxy_descriptor and rejects self maps, so its leak fixture reserves target64 with dup2 and maps the distinct original source to it. This avoids conflating the unrelated old self-map refusal with J348's leak; the production callback order and planted inheritable fd>=200 are identical. The reviewed head runs the repository's six tests unchanged. Expanded allocator guard also passed the full callback chain on self-map/mixed-map successes and ENOTDIR cwd, EBADF cgroup write, invalid source and invalid self-map failures (3 tests total, including the original two owner probes). This supplements the source audit; it is not a claim to inject every possible kernel failure.
Receipts:
/home/claude/.cache/codex-scratch/J352/evidence/{dev-fd-red,dev-alloc-red,head-fd-green,head-alloc-green,head-expanded-alloc,dev-writer,head-writer}.logon dev-02, copied to/home/kayg/.cache/codex-scratch/J352/evidence/on control. Probe sources and launchers are in the parent directory and attached bundle.Pre-existing P2: executable-fixture ETXTBSY. The failing fixture is
supervisor_tests.rs:113(std::fs::write), called forother-programat934-935 and exec'd by the shell planted at970-979. The entire supervisor test file has an empty diff against current dev (foreign-holder-fixture-diff.patch). My controlled probe confirms the Linux writer has FD_CLOEXEC=1, forks a sibling through the actual product callback chain, pauses it after those callbacks, closes the parent's writer, and gets ETXTBSY executing the copied ELF. Releasing that sibling to exec closes its writer and the same ELF executes successfully. This happens on both dev and this head. CLOEXEC does not close a write description at fork; marking CLOEXEC in the new allowlist likewise cannot release it before exec.The mechanism therefore predates this branch. The author's separate perf-VM syscall/exec harness measured +8261ns at34 fds for the added allowlist, with overlapping ranges (
j341/evidence/review-fd-cost/summary.json); this does not establish a change in flake probability. No missing-CLOEXEC product writer or new writer lifetime was found. There is no evidence the branch worsens the flake rate; these deterministic probes do not compare uncontrolled failure probabilities, and the extra pre-exec syscall can change scheduling. The author's honest current-head count remains33 passing full binaries and1 failing binary across34 runs. For a fixture repair, synchronize executable publication with other forks or execute these executable-writing cases in isolated processes; adding CLOEXEC alone cannot repair this race. Original failure retained asauthor-etxtbsy.log; controlled receiptsdev-writer.logandhead-writer.log.Dev-02 privileged row: RAN, not SKIP; 99 PASS / 2 FAIL, exit1. All four installed absolute iptables-nft/ip6tables-nft frontend paths passed preflight. The two failures are
ssh_original_port::{nf_tables,nft}_ssh_checks_the_original_service_after_translation:/usr/sbin/nft -j list counter inet ssh_port_test deliveredreports ENOENT at ssh_original_port.rs:21. All other99 cases passed. The row explicitly excludes real-root proxy credential/cgroup proof and PAM/systemd login paths; those are not covered by this user-namespace run. The standalone holder test also passed (1/1). Receipts:evidence/{host-frontends,privileged-row,privileged-launch,head-holder}.log. The gate-environment fixture suite passes (privileged-fixtures.log). I then checked out unchanged dev6b1bdb81b and ran only those two tests through the same privileged sandbox: both fail with the identical missing-counter error (each exit101). Thus these are proven baseline failures on dev-02, not regressions from this branch; their root cause was not diagnosed in this review. Receipt:evidence/baseline-privileged.log, build recorddev-mesh-build.jsonl. Dev-02 is still not a green full merge gate.For one auxiliary-spawn follow-up, this is my risk order. These gaps were already listed by J341 and are outside this proxy repair; severity assumes a stray inheritable capability exists, not a newly demonstrated exploit:
startup_guard::execute, agent/startup_guard.rs:55; helper.rs:49-55prepare_childcallers in SSH/remote helpers, ssh/process.rs:78, credentials.rs:267, master.rs:55, duplex.rs:43, remote/uninstall.rs:307/562sessions::isolated, agent/sessions.rs:863, manager callers163/1740Image::probe, infraternal/restart_image.rs:152lifecycle.rs:201is a cfg(test) caller, not a production leak path.prepare_childitself promises signal reset only; fix caller descriptor policies with explicit admissions, rather than silently making that signal API close intentional channels. Suggested acceptance criteria for the follow-up: planted high inheritable fd excluded at every entry, intentional fd3/login channels preserved, and exec ENOENT still reported. No library/engine change needed.I read J341's exact-head fast receipt and real-root proof rather than rerunning quick/fast, as required for reviewers by BRIEF-COMMON. Full gate source
/home/kayg/.cache/codex-scratch/j341/evidence/review-fast-sweep-failure.logidentifies this exact head and ends VERIFY_EXIT=0 before the separately recorded sweep failure. Root proof identifies the same head and uid0, passes6 mapping tests,2 allocator probes and the credential-drop parent-death test, ending J341_ROOT_PROOF_EXIT=0 and ROOT_SLOT_EXIT=0. Verbatim author's gate table:No repository code changed; reviewer quick/fast reruns are not applicable. All J352 executions have ended; test overlays were removed, the VM checkout is clean at the reviewed SHA, and its one target plus own temporary state were deleted (
evidence/cleanup.log). The remote implementation branch was rechecked at the same SHA. Evidence and source audit:/home/kayg/.cache/codex-scratch/J352/on control, corresponding evidence on dev-02; attached bundle contains logs, probes and launchers. No push, merge, deploy, host package install or decision change performed.APPROVE — head
454431e5479206a328aa61b97ac41e634db25b90.download J352 review evidence
J341 follow-up start: branch fix-privileged-skip from current origin/dev
f31cf18ab9. Investigating why the nf_tables preflight falsely SKIPs despite installed frontends; will trace the host/Nix/sandbox views, add a regression and make one focused commit, then run quick and compute01 verify fast with actual mesh privileged cases. Estimate: 30–45min investigation/fix plus 1–2h gate/build-slot wait. No host package changes, merge or deploy.J341 root cause confirmed on base
f31cf18ab9: os.access(X_OK) is True for all four frontends in host Python and the exact Nix Python3.14.8 (uid/euid1500). No missing mount view. In orch-gates/fast-dev-abad8c6.log lines12640–12641, the false missing-frontends message is emitted by test_missing_host_frontend_skips_the_row_without_claiming_coverage with os.access mocked False; fast-391c.log has the same. The real invocation later prints no-change SKIP (12677; fast-391c12528), and the final table reflects that no-change selection. The preflight did not actually reject installed tools. Evidence: /home/kayg/.cache/codex-scratch/j341-skip/evidence/{compute-host-nix-access.log,orchestrator-preflight-context.log}. Fix plan: buffer successful unittest fixture output with a deterministic red regression against false verdict leakage; expose actual comparison-base/changed-path count and positive frontend result in the runner. Keep genuine missing-tool SKIP and no-change semantics. A merge qualification must compare to pre-merge dev via VERIFY_QUICK_BASE, not already-updated origin/dev. The runner change selects all privileged areas for the requested compute01 fast proof.J341 update: one commit pushed,
dec870fd86, rebased onto latest origin/dev7c8bd2221a(new merge only changed TASTE). Deterministic red: new subprocess regression failed on the old unittest entrypoint because its passing mocked-missing-tools fixture emitted a real SKIP line (fixture-red.log). Green: regression plus missing/present frontend tests passed3/3 (fixture-green.log). Successful unittest output is now buffered; real failures retain captured diagnostics. Runner now prints its actual comparison base/changed-path count and positive frontend check. No access bypass or sandbox changes. Actual dev-02 sandbox proof passed all four --version calls, IPv4/IPv6 create/delete chains, and both restore frontends (dev02-real-frontends.log, SANDBOX_FRONTEND_EXIT=0). Compute01 quick is queued before full fast with the same target and explicit base7c8bd2221 so stale VM tracking refs cannot alter area selection. Evidence root: /home/kayg/.cache/codex-scratch/j341-skip/evidence/. Target: /home/claude/worktrees/j341-skip/target on compute01 only.J341 gate finding: full fast at
dec870fd86hit an unrelated workspace-test failure in infraternal --test session_exit_events: idle_daemon_discovers_unattached_and_adopted_shim_exit_without_requests,AssertionError: empty infraternal agent scheduled 1 times in 2.201 s. No Rust files changed in this commit. The gate continues through remaining rows; actual privileged integration proof is still pending. I will preserve this full receipt and check the test against unmodified pinned dev7c8bd2221 after the foreground gate ends. Remote artifact /home/claude/.cache/codex-scratch/j341-skip/evidence/fast.log; quick, clippy and CLI compile-out have passed.J341 coverage proof on
dec870fd86: compute01 verify fast privileged integration PASSED100/100, including95 infraternal-plugin-mesh cases and5 SSH mesh cases. Actual preflight printed all four frontends executable, comparison base7c8bd2221 with2 changed paths, containment checks passed, and all64 Python harness tests passed without leaked simulated SKIP output. Named cases include iptables::tests::real_nf_tables_ownership_partial_family_and_scaled_apply and node::rotation_tests::nf_tables_restart_fences_retained_replacement_address. Full100-case list and exact preflight attached as privileged-proof.json. Full fast continues; its earlier session_exit_events scheduling failure remains recorded separately (86637), and no overall green gate is claimed yet. Log: /home/claude/.cache/codex-scratch/j341-skip/evidence/fast.log.J341 full first fast finished:23 Rust rows PASS, including privileged integration100/100 (95mesh+5SSHmesh) and static builds; only test row FAIL101 from session_exit_events idle window. Full receipt /home/kayg/.cache/codex-scratch/j341-skip/evidence/{compute-fast.log,fast-table.txt}; static totals x86_64 28,171,984B and aarch64 25,305,312B, PT_INTERP absent. Then checked unmodified pinned dev7c8bd2221 using the same workspace test target/config:3/3 idle-oracle runs passed. Thus the earlier failure is not reproduced on the baseline and is not claimed a proven baseline failure. Receipts idle-base.log and idle-base-1..3.log. Checkout restored exactlydec870fd86. Retrying full fast once unchanged on the warm target, keeping first failure visible; no unrelated test patched.
J341 follow-up:
fix-privileged-skip, one commitdec870fd86076d1c18c3dd72b5fce45627e2bf0e, based on current dev7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a.The reported missing-frontend verdict was test-fixture output, not an actual failed host access check. All four
os.access(tool, X_OK)checks return True in both host Python and the exact Nix Python on compute01. The real privileged sandbox also sees and executes the tools on compute01 and dev-02: all four version calls, IPv4/IPv6 chain create/delete, and both restore frontends passed. There is no missing bind mount or different-root problem. Receipts:compute-host-nix-access.log,compute-real-frontends.log,dev02-real-frontends.log.In
orch-gates/fast-dev-abad8c6.log, lines 12640–12641 come from the passing mocked-missing-tools test. The actual runner later skips for no selected changes at line 12677.fast-391c.loghas the same pattern at lines 12491–12492 and 12528. Receipt:orchestrator-preflight-context.log.The commit buffers stdout/stderr of successful unittest fixtures, preserving their diagnostics on failure. A subprocess regression runs the actual test entrypoint and fails on the old code because it prints a simulated missing-frontend SKIP. It passes after the fix, together with the existing missing/present preflight tests (3/3). The real runner now prints its comparison ref, resolved merge base, changed-path count, and successful frontend preflight. Missing-tool SKIP, no-change SKIP, executability checks and sandbox containment are unchanged.
Merge qualification must set
VERIFY_QUICK_BASEto the pre-merge dev SHA. Comparing an already-updatedorigin/devagainst itself selects zero changes regardless of installed tools. This proof usesVERIFY_QUICK_BASE=7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a; the changed runner selects install, mesh, proxy and shim. Do not interpret a no-change SKIP as missing host tools.Quick on compute01 passed on the exact head, with the same target and base used for fast:
J341_SKIP_QUICK_EXIT=0,QUICK_LAUNCH_EXIT=0. Red/green receipts:fixture-red.log(1 failure),fixture-green.log(3 passed),compute-quick.log.Gate history: the first full fast completed with privileged integration PASS (100/100) and 23 Rust rows PASS; the workspace test row failed on
session_exit_eventsbecause it observed one scheduling event in its idle window. That receipt is preserved ascompute-fast.log/fast-table.txt. The idle oracle then passed 3/3 runs on unmodified base7c8bd2221(idle-base.log,idle-base-1..3.log), so its earlier failure is not claimed a proven baseline failure. No unrelated test was changed. The same-head full fast retry passed that oracle.The full fast retry completed with all 24 Rust rows PASS and privileged integration PASS: 100/100 cases, including 95 mesh and 5 SSH mesh cases. The tracer suite then reported 654 pass / 1 fail:
apps/tracer/docs-build.test.ts:185,doc.js stays small, expected <12000, received 13408. OverallFAST_RETRY_LAUNCH_EXIT=1; this is not an overall green gate. The identical docs failure was reproduced on unchanged base7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a(0 pass / 1 fail, received 13408,DOC_BASELINE_TEST_EXIT=1), then checkout was restored to the reviewed head. Receipts:compute-fast-retry.log,fast-retry-table.txt,doc-base.log.Verbatim retry Rust gate output:
Verbatim final tracer result:
Both static builds passed. Whole-dev artifacts: x86_64 28,171,984 bytes, sha256 fe88d948c558acca6eba6d4c3954bd1c7d9e6cd63933a81cf4427f20c43305b3; aarch64 25,305,312 bytes, sha256 58eb3d7e439a33efe42e070f0155ea5abc1fef615b39bffffd462fdb25eb7d84. Neither has PT_INTERP. These are whole-dev totals, not measured growth from this script-only commit. Receipt:
static-images.json.The required privileged row ran and passed twice. The unrelated baseline docs budget blocks an overall green fast gate and is left for the orchestrator; no budget was weakened.
Cleanup: own compute01 target removed; dev-02 has no own top-level target. Exactly one commit above the pinned base, control worktree clean, public branch head confirmed. No own gate or test remains queued/running.
All receipts live under
/home/kayg/.cache/codex-scratch/j341-skip/evidence/on the control host. No host packages installed, sandbox layout changes, merge, deployment or issue closure.