Repository navigation
Conversation
…air at the first read must heal it
…the marked repair needs no liveness check
…ils after its marker write
…d a list that dies before its repair
A marker that appears while the creator runs stops a serving host. One that appears after the creator has exited does not: the watch has stopped. Each case fails without the code that it covers.
…t serving The new give-up case fails its first marker write with EIO. create then sees no program in the manifest, sends nothing, and the host that starts late finds no marker and serves. The unit cases ask create to retry the write, to stop the host once the manifest names the program, and to stop retrying after 50 writes or once the host has exited.
… the program record lands A create that gives up on Windows sends no SIGTERM while the manifest names no program, so only the marker can stop a host that starts late. When the marker write fails, create now writes it again every 100 ms, up to 50 times, and reads the manifest after each write. It stops when the marker lands, stops the host once the manifest names the program, and stops retrying once the host has exited. The unit case for the stop now finds the program by the number of marker writes, because the readiness loop also reads the manifest.
On Windows the marker write in CreateGivesUp can now fail. With the new guard CreateRetriesMarker, which facts.mjs reads from the give-up catch, CreateStopsHostOnWindows goes on to "retry", and CreateRewritesMarker writes and reads again until the marker lands, the read names the program, or the host is gone. A create whose last write failed ends as "exhausted", which R17 does not cover. New runs: the win32 mutant breaks R17, and a win32 witness reaches the retry. Docs: SKILL.md, USAGE and the commands README.
With the host's watch, a marker that always landed off Windows made the SIGTERM redundant, so mutant-CreateStopsOnGiveUp passed. The write can fail on any platform, and off Windows the SIGTERM is then what stops the host: the mutant breaks R17 again.
The host resolves its Home to the real path and derives the socket path from it. On macOS tmpdir() is a symlink, so the tests looked for the socket at another path, and the two cases that need a serving host failed there. A TMPDIR that is a symlink reproduces it on Linux.
When a process of another user takes the creator's pid, the liveness probe of the marker watch throws EPERM inside its timer. In the host that is an uncaught exception, and here vitest reports it as unhandled errors, so the run fails.
The marker watch probes the creator's pid inside its timer. A process of another user that took that pid answers EPERM, isProcessAlive throws it, and the uncaught error ended the host. The watch now counts any probe error as an exited creator, checks for the marker once more and stops. facts.mjs reads the new watch, and the docs say how it treats the error.
On Windows, a process of another user that took the host's pid makes isProcessAlive throw EPERM in the marker retries. The error then left the catch, and create reported it as INTERNAL_ERROR without the session id.
…ker retries A process of another user that took the host's pid makes isProcessAlive throw EPERM. In the retry loop that error left the give-up catch, so create reported INTERNAL_ERROR without the session id. The new hostRuns counts any probe error as an exited host, and facts.mjs reads it.
The two cases where the watch must not stop the host waited 300 ms and 500 ms. They now spy on the timers, wait until clearInterval runs on the host's 100 ms watch, write the marker and check at once that the host still serves: a stopped watch never checks again. With a watch that never stops, or a probe error that leaves the timer, they fail.
# Conflicts: # .agents/skills/verify-session-lifecycle/SKILL.md # .agents/skills/verify-session-lifecycle/coverage.json # .agents/skills/verify-session-lifecycle/scripts/check.sh
…ter the merge of main
# Conflicts: # .agents/skills/verify-session-lifecycle/SKILL.md # .agents/skills/verify-session-lifecycle/coverage.json # .agents/skills/verify-session-lifecycle/scripts/check.sh
…ir comment recordDestroyed writes it for a terminal manifest too, where destroy stops no host, so the host can still be in its shutdown tail. It is ending either way, so the repair needs no liveness check.
… zombie creator A creator that writes the marker and exits between the watch's probe and its check must still stop the host: with the check before the probe, the watch stops without the marker. A zombie creator has exited, but kill(pid, 0) still finds it, so the watch ticks for as long as its parent does not reap it. The zombie case fails on the head.
kill(pid, 0) finds a zombie until its parent reaps it, so the watch ticked at 10 Hz for as long as a parent that never waits lived. The watch now also counts a creator that readProcStat shows as Z as exited. facts.mjs reads the new probe, and the docs name it.
The model of #324 has about twice the states of main's. On its head the four shares took 38, 40, 46 and 48 min of the 50 min timeout, and a share cannot be shorter than its longest run.
…runs at once A timeout raise alone leaves #324's 48 min share at the merge queue's 60 min limit. check.sh waits for each batch of CHECK_JOBS runs, so a share took the sum of its longest runs. With 8 shares and CHECK_JOBS 12, every share starts all its runs at once and takes about as long as its longest run. The job timeout goes to 45 min.
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Trial only, do not merge: it measures the 8-share
lifecycle-modeljob of #328 on the model of #324 (600068767cmerged witha3e6590f). I will close it after CI reports the share times.Generated with
xum• Model:anthropic:claude-opus-5-5• Thinking:xhigh