Flaky: real_binary_rootless_cleanup_survives_sender_disconnect_before_readiness (~1/15 on dev) #404
Open
opened 2026-11-06 17:20:02 +00:00 by kayg
·
23 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#404
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 agent test:
real_binary_rootless_cleanup_survives_sender_disconnect_before_readinessfails about 1 in 15 on plain dev.J314 (#394 comment 82622) ran it on dev
68ee8d9a5: 5 of 5 passed, then 37 of 40 passed. The 3 failures wereresource_unavailableatagent_daemon.rs:199, the same error J303 saw. Logs are at compute01~claude/j314/flaky.logandfail.*. Find the cause; the rule is no timing guesses (#334).J365 starting installer-suite investigation on fix-install-suite-404, base
f6f62a875(origin/dev). The current issue body concerns a different daemon flake; this work follows the assigned installer scope. Plan: inspect launcher/fixtures, measure full-suite failures and order under gate parallelism, create a deterministic concurrent-fixture red test, fix the evidenced cause, run 20 full suites, then verify quick on dev-02 and fast on compute01. Estimate: 90 minutes excluding slot queues and cold builds. No retries, merge, or deployment. Evidence will be retained under ~/j365 on the VMs.J365 reproduction setup: baseline
f6f62a875, compute01 nproc=16, cargo -j4 with default libtest parallelism (16), through the inspected build-slot launcher and Nix. State roots are already fixture-specific (exclusive mkdir with random 12-digit suffix); no shared-lock collision found by inspection. The gate builds recovery-helper before cargo test; an initial focused-command setup omitted that helper and produced exit 127, so those invalid runs are excluded. Corrected baseline logs: compute01 ~/j365/baseline-ready-*.log; helper build ~/j365/helper-build.log. First corrected full suite: 107 passed, 0 failed, 2 ignored, 14.79s; host load average was 32.33.J365 hypothesis update: 8/8 corrected baseline suites currently pass, including 16-thread runs at host load >60 (~/j365/load.log and baseline-ready-*.log). Found a fixture lifecycle mismatch to test: Local::run detaches Input::Transfer through setsid --fork --wait, but runs Input::Negotiated directly in process::execute’s client group. That helper deliberately SIGKILLs the client group before reaping on successful completion, so negotiated fixture leases can be killed although real remote SSH leases are outside that group. This is a hypothesis, not yet the cause of the reported flake. Continuing the unmodified baseline loop before a deterministic concurrent-fixture probe.
J365 second hypothesis: retire_setup_lease treats matching PID/start ticks plus a missing fd/7 as exit 73. A zombie still has /proc/PID/stat but cannot hold any descriptor, so an expired/killed lease pending reaping can be reported as running. I will test this using an explicit parent/reaper handshake, alongside concurrent isolated fixtures. This may also expose a production stale-holder edge; it is not yet established as the original suite failure. Unmodified sweeps remain green so far (11 completed).
J365 reproduced on unmodified
f6f62a875: baseline-ready run 19 failed, runs 1–18 passed. Failure order: only restart_recovers_partial_stage_retirement, its kind case, at original install.rs:3622 during the check after partial cleanup; exit_status Some(73). Suite result: 106 passed; 1 failed; 2 ignored; finished in 15.01s. Baseline failure rate 1/19 suites (5.26%); 1/2033 active test executions. Full completion order and error: compute01 ~/j365/baseline-ready-19.log; every run and status:/j365/baseline-ready-summary.log; host load at run start 40.70 (/j365/load.log). Next: trace which lock refuses, then validate the concurrent deterministic regression before implementing.J365 trace narrowed the reproduced refusal: a second full sweep failed the same test (both case); the appended source-location diagnostics identify previous_attempt.sh:512, scan_holders -> hidden_holder, for /proc/1055118. This is the process-liveness scan, not direct contention on another fixture’s setup-lock path. Evidence compute01 ~/j365/trace-1.log and ~/j365/refusals.log. Adding a diagnostic at each install_process match to distinguish service scope, terminal scope and installation path before making any change.
J365 progress checkpoint: no production changes chosen yet. Baseline 1/19 suites failed; first diagnostic sweep also failed at hidden_holder (previous_attempt.sh:512). A further 20 diagnostic suites passed under lower host load. The next sweep tests the long scratch-root override/private /tmp fallback and is queued on compute01 (PID 1656725); dev-02 is also busy with two queued jobs. Source diagnostics are preserved in compute01 ~/j365/instrumented/, alongside logs. An uncommitted zombie-lease hypothesis probe was saved outside the branch at control /home/kayg/.cache/j365/zombie-probe.patch and removed from the worktree because it does not yet explain the observed scan failure. Branch remains
f6f62a875; exactly one target, compute01 ~/worktrees/j365/target. Continuing in the foreground.J365 additional fixture finding: Fixture::drop embeds setup_lock.sh alone, but retire_setup_lease -> read_lease_birth calls process_start_ticks from setup_guard.sh. Without that definition the conditional skips lease termination, its flock -w 2 times out, and Drop ignores the failure and deletes the fixture tree. In the first trace, lease PIDs 1034802, 1035994 and 1042024 were still sleeping with fd/7 pointing at their deleted fixture stage directories after the suite finished (~/j365/refusals.log records each timeout; source snapshot ~/j365/instrumented/setup_lock.sh). This confirms a fixture leak, but unique directory inodes mean I have not yet linked it to the original false holder. No fix selected from this finding alone. The next diagnostic run remains queued on compute01.
J365 ROOT CAUSE CONFIRMED: the first /tmp-fallback sweep reproduced the reported multi-test pattern. Every false refusal names the SAME unrelated PID 1822819 in cgroup 0::/user.slice/user-1500.slice/user@1500.service/app.slice/infraternal-session-3ab159ed12af4cbaaa1006c96d2d489b.scope, while MATCH_SCOPE shows distinct isolated fixture roots (/tmp/is-/i/.local/share/infraternal). scan_holders -> hidden_holder -> install_process treats any same-uid infraternal-session-*.scope as belonging to this install. Thus concurrent host-login tests contaminate independent installer fixtures despite unique state roots. Evidence: compute01 ~/j365/trace-tmp-1.log and ~/j365/refusals.log (MATCH_SCOPE plus exact cgroup). This is also a production attribution bug for a rootless install alongside a root-managed login of the same account. Next: bind scope liveness to installation-owned session evidence, with a deterministic concurrent-fixture red test; retain genuine live-holder refusal. No retries or timeout increases.
J365 matching baseline pattern now complete: ~/j365/trace-tmp-1.log reports 98 passed; 9 failed; 2 ignored, 303.28s, exit 101. Failure order is retained in that log; summary names earlier_binary_cache_is_refreshed_before_owned_recovery, earlier_control_socket_receipt_recovers_before_a_new_setup, known_failed_setup_finishes_without_a_second_confirmation, restart_recovers_partial_stage_retirement, review_restart_recovers_cleanup_after_base_retirement, review_restart_recovers_cleanup_after_owner_retirement, stale_previous_attempt_socket_can_be_retired_without_manual_cleanup, start_fresh_resumes_the_same_attempt_after_owner_confirmation, turning_off_paused_host_provisioning_preserves_earlier_leftovers. The last two waited for the 300s hang guard after the false setup-running result. Combined unmodified/diagnostic evidence: original baseline 1/19 failures; same bug reproduced twice more with source tracing, latest 9/107 active tests failed. Root cause is unrelated same-user session scopes, NOT UUID/path collision. Deterministic concurrent-fixture red test is now building on the free dev-02 slot; compute01 is fully occupied again.
J365 deterministic RED proven on dev-02: concurrent_fixtures_attribute_hidden_session_scopes_to_their_own_install fails with “another install’s hidden scope blocked this fixture” and exit_status Some(73). Its concurrent first fixture correctly refuses its own scope; the second incorrectly refuses that SAME process despite a separate root and no endpoint there. The process is genuinely non-dumpable (prctl), socket/journal files are real; only the cgroup read is redirected to a controlled per-PID fixture view. Both child and installs are cleaned before asserting, including red runs. Evidence dev-02 ~/j365/red.log, ~/j365/red-status.log: RED_EXIT=101. An initial probe hit sun_path before exercising the bug; it was corrected to bind relative to its directory, matching existing fixtures. Implementing only the scope-to-endpoint binding now.
J365: deterministic red/green proven. The same concurrent-fixture regression fails on the original classifier with exit 73 for fixture B and passes with endpoint-bound scope ownership. Existing independent ownership-shell oracle also passes (2/2, 81.34s). Evidence: dev-02 ~/j365/red.log, red-status.log, green.log, ownership-green.log, green-status.log. Implementation commit
b68edbfffpushed; integrated current origin/devabad8c6c0before final validation. No retries or test serialization added. Next: quick on dev-02, then 20 default-parallel install suites and fast on compute01.J365 real-environment proof: created a unique terminal scope through the real user systemd manager on dev-02, running a non-dumpable process. Two isolated installer ownership checks ran concurrently using unmodified /proc cgroup reads. Baseline exits [73, 73]; fixed exits [73, 0]. The owning installation remains protected and the unrelated installation reports stale recovery normally. Artifact: dev-02 ~/j365/real-scope-proof.py and real-scope-proof.log (REAL_SCOPE_PROOF=PASS), actual scope 414b3f4f448d49ae98cf6f344505c6ad, pid 3524715. Exact child was reaped and private fixture directory removed. No deployment. Quick first stopped on a missing doc comment in the adjacent existing test; fixed in
05aef6860and rerunning quick.J365: verify quick passed on dev-02 at head
05aef6860d(124 changed-package unit tests passed, 6 ignored; workspace clippy passed). Artifacts ~/j365/quick-final.log and quick-final-status.log, QUICK_EXIT=0. The requested 20-suite proof is now foreground-queued on compute01 through build-slot, default 16 test threads, -j4, INFRATERNAL_TEST_STATE_ROOT=/tmp/j365-gate-state-long-override (same private short-root fallback condition that reproduced 9 false refusals). Script ~/j365/after-sweep.sh writes after-N.log, after-summary.log, after-load.log, after-head.log. All existing slots busy; no other J365 slot held.J365 proof sweep complete at head
05aef6860d: AFTER_SUITES=20 FAILED=0. Each run: 108 passed, 0 failed, 2 ignored. Total 2,160 active executions; default 16 test threads, cargo -j4, concurrent shared gate load; no retries. Baseline unmodified: 1/19 full suites failed (5.26%); instrumented reproduction also captured 9/107 failures and the same unrelated hidden scope attributed to distinct fixture roots. Evidence on compute01: ~/j365/after-summary.log, after-{1..20}.log (completion order), after-load.log, after-head.log; baseline-ready-summary.log, baseline-ready-{1..19}.log; trace-tmp-1.log, refusals.log. Proceeding to requested verify fast on compute01.J365 gate progress at unchanged head
05aef6860d: compute01 verify fast has passed workspace clippy, workspace tests, the installer suite (108 passed / 0 failed / 2 ignored, 5.52s inside the gate), ownership-shell oracle, SSH inode-reuse proof, shim process-per-user, dependency/doc checks, all 5 selected privileged SSH tests, release-probe exclusion and fuzz-reporter checks. Static release builds now running. Foreground session remains active; no other J365 slot held. Log ~/j365/fast.log, own target ~/worktrees/j365/target. Dev-02 target already removed; its evidence logs retained.J365 gate finding: verify fast exited 1 after ALL 24 Rust rows passed, including workspace tests, privileged integration and both static builds. Frontend docs-build.test.ts:185 fails doc.js stays small: Expected <12000, Received 13408. Proven unchanged on detached, unmodified origin/dev
abad8c6c0cthrough build-slot: same test fails with identical 13408 (16 pass, 1 fail). Task branch restored at05aef6860d. No frontend files differ from origin/dev. Artifacts compute01 ~/j365/fast.log, fast-status.log (FAST_EXIT=1), baseline-docs.log, baseline-docs-status.log (BASELINE_DOCS_EXIT=1), baseline-docs-head.log. This pre-existing frontend gate defect is outside the SSH ownership fix; no gate retry or limit change.J365 finished implementation on
fix-install-suite-404, pushed head05aef6860da7d171975b9ecb483924571410ed6b. Current dev integrated before final validation. No merge to dev, deployment, or issue closure.Cause: a production liveness-attribution bug.
session_scope_processtreated every same-uid terminal scope as this installation, even when its endpoint belonged to a different state root. Tracing attributed the same unrelated scope PID to multiple independent fixture paths. The fix binds a canonical scope session id to an owned endpoint in either supported state layout. It preserves refusal for this installation's own hidden process. No retries, test serialization, timeout increase, or new dependency.Proof:
~/j365/baseline-ready-{1..19}.log, summarybaseline-ready-summary.log.trace-tmp-1.log,trace-tmp-summary.log,refusals.log, diagnostic source snapshots ininstrumented/.~/j365/red.log,red-status.log,green.log,green-status.log.~/j365/real-scope-proof.py,real-scope-proof.log.~/j365/after-{1..20}.log,after-summary.log,after-load.log,after-head.log,after-sweep.sh.~/j365/ownership-green.logand compute01~/j365/fast.log.verify quickon dev-02: QUICK_EXIT=0, 124 changed-package unit tests passed, 6 ignored.~/j365/quick-final.log,quick-final-status.log.verify faston compute01: all 24 Rust rows passed, including install (108 passed, 0 failed, 2 ignored), privileged integration and static builds. Overall FAST_EXIT=1 on an unrelated existing frontend docs size assertion. Reproduced once on detached unmodified origin/devabad8c6c0ca8c9eaeea66f247c2318b3691463b9: BASELINE_DOCS_EXIT=1, identical Expected <12000 / Received 13408.~/j365/baseline-docs.log,baseline-docs-status.log,baseline-docs-head.log. No frontend files differ from dev. The gate stopped in that frontend row, so later frontend checks did not run.Gate output excerpt verbatim (
~/j365/fast-summary.log; full outputfast.log):The size deltas above are against the gate's configured historical baselines, not an attribution of those deltas to this small shell change. Binary hashes are in compute01
~/j365/static-artifacts.log. Suite wall times are insuite-times.log; differing shared load makes them diagnostic rather than a performance benchmark.Separate finding retained for follow-up: Fixture::drop omits setup_guard.sh when sourcing setup_lock.sh, so process_start_ticks is undefined and some leases outlive removed private roots. It did not cause the observed cross-install refusals, and is not bundled into this fix. The earlier finding comment records the exact PIDs and deleted fd paths.
Evidence retained outside targets under
~/j365on both VMs and copied to control/home/kayg/.cache/j365/. Build targets on both VMs removed; no own fixture orphans remain. Ready for the orchestrator's independent review; the pre-existing frontend gate defect needs separate handling.J371 independent correctness review starting. Branch
fix-install-suite-404, head05aef6860da7d171975b9ecb483924571410ed6b, current origin/dev7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a(author gate baseabad8c6c0). Plan: inspect D337/D355/D359 and J349/J342 findings; reproduce deterministic red/green; rerun actual systemd scopes as root on compute01 in a throwaway clone; assess fixture teardown and confirm unchanged docs-size failure. Estimate 60 minutes excluding build-slot queue. Reviewer brief forbids rerunning full gates; will inspect author receipts and run focused proofs only. No merge, push or deploy.J371 finding update: real root systemd-scope proof on compute01 passed with CAP_SYS_PTRACE dropped so the non-dumpable child is genuinely hidden. Current dev
7c8bd2221returns [73,73];05aef6860returns [73,0]. Evidence/root/j371-evidence/real-scope-proof.{py,log}; scope child reaped and fixture roots removed.Pre-existing P2 test-fixture cleanup defect confirmed independently: sourcing setup_lock.sh alone reproduces
process_start_ticks: not found, retire exits 73, and the exact live lease still holds fd/7. Sourcing the production setup_guard.sh + setup_lock.sh bundle retires that same lease, exits 0, and it is reaped. Artifact compute01~claude/j371-evidence/lease-proof.{py,log}. The production SETUP_LOCK constant concatenates both files, so this omission is in Fixture::drop, not the product bundle. No code changed.Focused docs test independently rerun on detached unmodified current dev
7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a: 16 pass / 1 fail, Expected <12000 / Received 13408. Artifact/root/j371-evidence/docs-dev.log, head receiptdocs-head.log. These inputs have no diff from the review head. Waiting on my focused committed-regression build; no full gate rerun per reviewer rule.J371 independent correctness review: APPROVE
Reviewed
fix-install-suite-404at05aef6860da7d171975b9ecb483924571410ed6bagainst currentorigin/dev,7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a. Read the common brief, CLAUDE.md, architecture/process, D337/D355/D359, J365's evidence, and J342/J349's reviews and repair records on #394. No merge, push, deployment, decision change or repository code change.Findings
scan_holders agentbefore stopping andscan_holders allafterward, so it does not acquire Replace'sserviceexemption for terminal shims.tests/install.rs:291sources setup_lock.sh alone, soread_lease_birthcannot callprocess_start_ticks; Drop ignores the refusal and removes the private tree. My exact-lease probe reproduced exit 73 plusprocess_start_ticks: not found, with fd/7 still holding the fixture stage. Supplying the production guard-plus-lock bundle retired the same lease with exit 0; it was reaped. Production'sSETUP_LOCKalready concatenates both files (src/install.rs:21), so this fixture omission does not hide the same defect in product cleanup. It can contaminate resource observations and should be fixed separately. It does not explain the demonstrated cross-install attribution: that is independently red without a leaked lease. Evidence: compute01~claude/j371-evidence/lease-proof.{py,log}.Independent evidence
concurrent_fixtures_attribute_hidden_session_scopes_to_their_own_install. Head passes. Replacing only previous_attempt.sh with the exact current origin/dev blob makes the same test fail with the expected “another install's hidden scope blocked this fixture”, exit 73 for fixture B.GREEN_EXIT=0,RED_EXIT=101. All other SSH package source is identical between current dev and head; the transplant isolates the production change. The child readiness handshake and retained stdin keep it live, and both installations and the child are cleaned before assertions. No retries or added sleeps. Artifacts: compute01~claude/j371-evidence/{run-regression.sh,green.log,red.log,regression-status.log,dev-previous_attempt.sh}./root/j371-clone, through build-slot, actual/proccgroup reads and a non-dumpable child in a uniquesystem.slice/infraternal-session-<id>.scope. Dropped CAP_SYS_PTRACE so root genuinely cannot read the child's exe; no substituted cgroup data. Concurrent owning/unrelated install results: dev [73,73], fixed [73,0].REAL_SCOPE_PROOF=PASS. Exact child reaped and fixture directories removed. Artifacts:/root/j371-evidence/real-scope-proof.log; the executed harness is attached asreal-scope-proof-as-run.py. This shell-attribution proof reused the existing API-level-7 recovery helper; the compiled regression separately built the helper at the review head.holders_beside_agentand post-stoplive_session_sockets; scan_holders allsequence,stop_agent_unitcgroup check, finished-install validation before deleting whole set-asides, andsettle_set_asidebefore journal/set-aside deletion. None is changed by this branch. An optional nine-test root sample/repeat was cancelled while still queued behind full gates; it did not run and is not claimed as evidence. The completed root-scope proof above did run.7c8bd2221a2cfabd1cbf2f839edc3a1aeb3bfb7a;bun test docs-build.test.tsgives 16 pass / 1 fail,doc.js stays small, Expected <12000 / Received 13408,DOCS_EXIT=1. No docs-build inputs differ from the review head. Artifacts:/root/j371-evidence/{docs-head.log,docs-dev.log}. This agrees with J365's original dev proof atabad8c6c0.Author gate output, verbatim
From compute01
~claude/j365/fast-summary.log(author finish comment 86589):Cleanup: removed the own build target, the throwaway
/root/j371-clone, copied helper binary and root bundle; checked both own transient scope cgroups are absent. The review checkout is clean. No test, build or queue belonging to J371 remains running. Evidence stays under~claude/j371-evidence,/root/j371-evidence, and control/home/kayg/.cache/codex-scratch/J371/evidence; selected logs/harnesses are attached here.Verdict: APPROVE for this ownership fix. No new P1/P2 product findings. Keep the pre-existing fixture teardown and frontend-size gate defects tracked separately; this approval does not claim a green full gate.
Head:
05aef6860da7d171975b9ecb483924571410ed6b.J376 follow-up is tracked on #432, branch fix-install-suite-red, base current dev
b31c2da2d. The supplied J372 nine-failure fast log predates this merge (merge base7c8bd2221and old source lines/test count). Its later standalone failure is different: missing recovery-helper yields Upload/127; reproduced on a clean target and removed by building only that helper on unchangedb31c2da2d, including a fresh HOME/runtime control. All nine historical cases pass on current dev with the helper. No evidence yet that the reported failures indicate a shipped #404 regression. One distinct checked-reader rollback/73 occurred in the control full suite; tracing it on #432 before making any production-impact claim. Evidence compute01 ~/j376-evidence/.J376 final evidence: the confirmed current-dev failure is test-only missing recovery-helper on focused cargo test --test install, fixed on fix-install-suite-red at
046c88931c. Shipped Add host code is unchanged. J372's nine fast-log lock failures predate #404 rather than proving a post-merge regression. Three consecutive compute01 install suites passed 108/0/2 each; quick and full fast pass, FAST_EXIT=0, including all privileged SSH tests. #421 did not reproduce.One separate unchanged-baseline buffering-reader rollback SetupRunning/73 observation remains unexplained and has not recurred in the recorded diagnostics or validation; its production impact is not established. Full findings, exact gate output and attached red/green receipts: #432 (comment) . No production modifications, merge, or deployment. J376 target removed.