Repository navigation
Windows-2025 journal actor cleanup intermittently lacks exit and EOF proof #846
Description
Describe the bug
Windows-2025 deterministic hardening has intermittently refused journal-test actor cleanup with Actor normal exit/kernel/bothEOF not proven. The affected test changed between two heads. A single diagnostic rerun of the Windows-2025 job passed on the unchanged second head; the actor-level cause remains UNOBSERVED. A passing rerun is not a source fix or proof of the original actors' cleanup.
This tracker is separate from #831, which concerns native workspace UIA convergence (MULTIPROJECT_IDENTITY), not journal actor lifecycle evidence.
To reproduce
These are retained CI observations, not a deterministic reproduction recipe:
- On Bound Windows capture seed lifecycle and output ownership #845 head
30b718f2a69ad8eb65600364fa986282c3f17df8, run 38941311015, job 117109433142 failedVerify runner contract. Its offline capture child executed 69 cases: 66 passed and 3 failed. The concurrent numbered-publication test reported two incomplete actor cleanups. A separate nonempty-argument case also hitJournalUnavailable(openMs=0.610,copyMs=2.605,totalMs=1281.984); the report-gate failure was downstream. This head was not rerun. - The subsequent one-line production change removed the additional successful-read
CopyCompletedobservation before the deadline assertion, retaining timing accumulators, failure diagnostics, flush semantics and the 1000ms budget. On new head58a7723b77a19bf7dd952048d0f609429a6f8407, run 38945518434, original job 117123618253 executed 69 cases: 67 passed and 2 failed. The prior nonempty-argument and concurrent-publication cases passed. The transient-Open retry test instead reported incomplete actor cleanup, followed by the dependent report-gate refusal. - The operator authorized exactly one diagnostic rerun of that Windows-2025 job only, with no further source change. Attempt 2, job 117129884237, ran 18:26:51–18:35:01Z on the same
58a7723bhead and passed. The retained log contains one actualUiCaptureDriversummary with 69 executed / 69 passed / 0 failed, and oneValidationRunner.Tests.ps1: PASSline at 18:34:57.7803101Z.
The old 30b718f2 head did not have an identical-head passing rerun. Do not collapse the source change between heads and the diagnostic on 58a7723b into two successful reruns.
Expected behavior
Keep actor exit, retained-generation kernel and both-stream EOF requirements fail-closed. When cleanup is refused, preserve and surface each actor's actual stdout, stderr and exit code so the cause can be investigated instead of being hidden behind the cleanup summary.
Investigate before proposing any timeout, journal budget, retry or cleanup-gate change. The successful diagnostic does not establish whether the first attempts failed because of scheduling, output handling, a test-harness defect or another cause. No underlying actor stdout/stderr diagnosis is claimed here.
Screenshots
None. This is an offline CI contract failure; no GUI capture or screenshot is part of this evidence.
Environment
- GraphCode version: Bound Windows capture seed lifecycle and output ownership #845 heads
30b718f2a69ad8eb65600364fa986282c3f17df8and58a7723b77a19bf7dd952048d0f609429a6f8407. - macOS version: not applicable; GitHub-hosted
windows-2025,pwshdeterministic-hardening matrix entry. The diagnostic was an unchanged-head retry, not a claim of an identical physical host or measured identical runner image. - Backend: offline capture/journal fixtures; no paid backend or GUI lifecycle claim.
Additional context
Retained complete job-log SHA-256 values:
- Original
30b718f2job 117109433142:ECE6C0FBAF9C201925E49E6F1FD14EB0296A2794CDEB98132EB2FE5B111F9A11(384,746 bytes). - First
58a7723bjob 117123618253:69964D9A5648DF4196FDF251DF261C455AC144DD746A0AF446DC0407DB8AD03D(382,358 bytes). - Same-head diagnostic job 117129884237:
FD7603041B9A40051F72C3ADFC4553099D8176E95A1269623DA8F084D50F440A(381,335 bytes).
The first 58a7723b job log had no JournalUnavailable match in an executed whole-log search; that is a limit of the retained job log, not proof that an unretrieved actor artifact contains no such error. The actor cause remains unobserved. Original failed logs are preserved separately from the diagnostic; neither is overwritten or relabelled as passing.
A separate real-product packaging failure on this head was a GitHub connection timeout during pinned dependency bootstrap, before product steps. Its separately authorized job-only network retry passed; it is not the actor-cleanup signature.
Refs #845, #834 and #829. No implementation worker, new local/native run, additional CI rerun or budget/gate change is assigned by this tracker.
Activity
coneilen commentedon Oct 16, 2026
Tracking relationship (operator-directed): #846, #849 and #851 form the capture-core flake set. This is an administrative grouping of distinct intermittent failures, not a claim that their root causes are identical or proven harmless flakes. #846 tracks actor exit/kernel/both-EOF evidence; #849 tracks unavailable Process Handle/Id during Snapshot attestation; #851 tracks journal per-object budget ownership/pre-open timing. Preserve each failed attempt and its exact signature independently; a passing diagnostic is not a source fix or causal explanation. Current execution order is #851 first, parked #850 mechanical rebase/requalification after that merge, then #849, then the separately leased live B attempt. No retry, gate weakening or live execution is granted by this comment.
coneilen commentedon Oct 17, 2026
New occurrence with recovered primary: PR #852, exact head
a1df96689f02c1b7aae19000172e161fed890d4b, Windows-2025 job 117259886481. The offline capture suite executed 72 / 70 passed / 2 failed: the transient-Open actor test and its dependent report gate. No diagnostic rerun was requested.The job log showed the #846-shaped
Actor normal exit/kernel/bothEOF not provenwrapper, but the uploaded artifactui-capture-hardening-windows-2025-pwsh-1(artifact 12082798789) recovers the actual chain:suite/journal-contracts/retry-to2/Reader-failed.json: realJournalUnavailable, sequence 1, HRESULT80070020, retries 2, total 1586.517 ms, previous completed observation write 837.375 ms, previous ordinal 2.Writer-failed.jsonpropagates that same reader failure.actor-cleanup.jsonrecords two cleanup-proof failures with zero receipts, obscuring the reader primary in the aggregate test message. Actor cleanup is still unproven; no clean-exit/EOF claim is inferred.All three observation rows bind transaction
f2167dbfcbba42be9d7b2a7c39191c4d: ordinal 1OpenFailedat total 87.355 ms; ordinal 2OpenFailedat total 741.006 ms with previous write 327.659 ms; ordinal 3DeadlineExhaustedat total 1593.097 ms with previous write 837.375 ms. The retryable sharing-error observations still selected durable flushing under R2's failure-decision policy.previousObservationWriteMsmeasures the whole serialization/Open/Write/selected Flush/Dispose operation, not isolated FlushFileBuffers duration.Hypothesis, not retrospective proof: this may explain earlier #846-shaped journal-contract actor failures when cleanup reporting masked a reader timeout. This artifact establishes the chain for this occurrence only; the earlier actor-level causes remain unobserved. No common-cause/flakiness rate or prior-actor cleanup proof is claimed.
The real journal primary triggered STOP, so the log-only classification that this was an independent #846 event with no journal recurrence was withdrawn before any rerun API call. Windows-2022 on the same head positively executed 72/72/0 and
ValidationRunner.Tests.ps1: PASS; that does not override the Windows-2025 failure. R3 is separately authorized to buffer transient/retryable observations, retain durability only for terminal decisions, and include actor primaries in cleanup-failure messages without weakening assertions. Acceptance remains both hosted platforms green on the next exact head.Retained ZIP SHA-256:
DA3B94F81DEA9219E388CF1C47554918FD7A029C1095A32AC191AC5F3840347E; Windows-2025 raw job-log SHA-256:BF1528D105116B2FAEEBD7DBBF586FF41424BF898995071EDFDF5E0703BD1F5B.Refs #851. No budget, retry, deadline or cleanup gate was widened.