Skip to content

test: distinguish Linux fixture termination from zombie reaping - #61

Merged
AGiorgetti merged 1 commit into
developfrom
feat/codex-linux-process-observation
Oct 15, 2026
Merged

AGiorgetti merged 1 commit into
developfrom
feat/codex-linux-process-observation

Conversation

@AGiorgetti

@AGiorgetti AGiorgetti commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Change

Linux process-tree timeout validation can fail after a descendant has terminated but remains an unreaped zombie: .NET's attached non-child HasExited uses kill(pid, 0), which still sees its PID entry. This was the sole failure in merged CI 38753576372. That run did not record procfs state, so the historic zombie explanation remains strongly supported rather than proven.

This test-only correction reads PID, parent PID, state, thread count and kernel start token from one procfs snapshot. It preserves exact ownership matching and accepts an owned terminal Z/X state only with one thread. A zombie leader with siblings, zero thread count and ordinary states remain active or unconfirmed; malformed records fail loudly. Observation stays inside the existing six-second outer test budget and failure output includes the last snapshot. Fixture cleanup uses the same distinction within its existing three-second bound.

The timeout helper, kill requests, execution/cleanup deadlines, captured output, pipe checks, benchmark code, allocation assertions, symbols/publication validation and workflow gates are unchanged. The live-orphan positive control remains. This distinguishes executable work from PID metadata awaiting an external reaper; it does not promise reaping of every descendant PID entry.

Validation

  • Red-first: all 34 new snapshot and persistent-active cases fail before implementation.
  • Final focused set: 48/48 across three complete local runs (144 cases), zero failures/skips. Includes terminal/nonterminal/malformed records, PID/start-token mismatch, live siblings, persistent-active rejection and existing real subprocess regressions.
  • Broader process/release/publication safeguards: 289/289; existing allocation isolation: 8/8; zero failures/skips.
  • Release solution build passes with zero errors and two existing transitive System.Security.Cryptography.Pkcs 9.0.6 audit warnings. Packaging-test project build passes without warnings/errors.
  • Independent read-only static acceptance review: no material findings; accepted snapshot indices, exact ownership, sibling rejection, bounded observation/cleanup, retained controls and scope. This was static review, separate from the executed checks above.

CI and limits

Exact-head CI 38757984928 completed successfully on e49fe5ab6935f2fdd02ccd3357a84859347d40f0, attempt 1:

  • Windows and Linux full suites each passed 1,434 tests: generator 1,091, runtime 5, integration 1, packaging/process 337. Zero failures/skips, including the real Linux observation path and required Native AOT coverage.
  • All six Roslyn jobs passed 1,091 tests each on 4.8.0, 4.14.0 and 5.9.0 across both operating systems, zero failures/skips.
  • Linux sample and existing benchmark smoke steps and both solution-path validations passed.
  • Pack & Validate, Verify Release Artifacts and Publish NuGet Packages were conditionally skipped for the PR trigger. No release-artifact publication evidence is claimed.

No local timing benchmarks or nested real-build/package-launching checks were run for this follow-up; full CI supplied packaging, trimming, required Native AOT and existing smoke coverage. No performance acceptance claim. The draft remains open for human review and the working tree is clean.

Follow-up to merged PR #60, based on develop 1489dad and preserving #59 symbols fixes. Draft for human review; no merge, publication, workflow retry or machine/system setting changes. No tracking issue was created: automatic approval review rejected issue creation under the original no-issues boundary, and no tracker-write workaround was used.

@AGiorgetti
AGiorgetti marked this pull request as ready for review October 15, 2026 15:27
@AGiorgetti
AGiorgetti merged commit 4ff4fe4 into develop Oct 15, 2026
11 checks passed
@AGiorgetti
AGiorgetti deleted the feat/codex-linux-process-observation branch October 15, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant