Summary
The GitHub-hosted Latency benchmarks (informational) job is nondeterministic and currently lacks enough diagnostics to distinguish socket timeouts, EINTR, and other native read failures.
This is not a v0.2.0 release blocker: the job is explicitly continue-on-error, it is excluded from the required tests aggregate, the exact dev push passed all mandatory checks, and the aggregate tests check is green. It must be hardened before latency is promoted to a required gate.
Exact same-SHA evidence
Both jobs tested head SHA 8af2340965a28894129a7300611f8dc210023776 on 2026-07-23:
The PR checkout used synthetic merge commit 51a98894b63f5fdfaba412b8e45595005c08b114, but its tree SHA was a41b5d90ea17bf44e41fa88cb899ac519bebd939, exactly equal to the tree of 8af2340965a28894129a7300611f8dc210023776. Both jobs used:
- Actions runner
2.336.0
- Ubuntu 24.04 image
20260714.240.1
- CPython
3.13.14
- the same resolved Python package versions
They ran on separate workers and regions:
- failed: worker
73fe17d7-dcc9-4ace-bd40-6c0deb4ae076, centralus
- passed: worker
b3b12663-af79-4a89-914a-74343651b920, westus
GitHub documents that each standard GitHub-hosted ubuntu-latest job runs in a fresh VM: https://docs.github.com/en/actions/reference/runners/github-hosted-runners
Failure evidence
Failed job:
- subprocess cold path: median
173.36 ms, p95 302.34 ms, p99 504.39 ms
- native daemon-client warmup: return code
11, empty stderr
- wrapper daemon-client measured call: return code
11, empty stderr
- in-process hot path: median
2.84 ms, p95 74.99 ms, p99 171.95 ms
- failed assertion:
74.98812900001894 < 10
- result:
3 failed, 1 passed
Passing same-SHA job:
- subprocess cold path: median
262.66 ms, p95 277.94 ms, p99 291.44 ms
- native daemon-client: median
5.13 ms, p95 5.47 ms, p99 5.93 ms
- wrapper telemetry: median
6.64 ms, p95 7.02 ms, p99 7.21 ms
- in-process hot path: median
4.10 ms, p95 4.49 ms, p99 4.99 ms
- result:
4 passed
In the generated native client, return code 11 means read() returned a negative value. The test configures a 100 ms socket timeout, so a receive timeout under scheduler stalls is the leading explanation, but the client collapses all negative read errors to code 11 and emits no errno; the exact cause cannot be proved from the current log.
Historical flake evidence
In the 20 most recent latency jobs inspected, 5 failed: a 25% observed failure rate.
Four same-SHA push/PR pairs produced one pass and one failure:
8af2340965a28894129a7300611f8dc210023776
7b88e693f1228afa94584d3f997e92414eb892c8
a1b561f2b06dc7892c2ab0106cf869da3944ddca
23047fb8a21eb729852ae4690a3daf35a7616a87
The event type alternated between the passing and failing member of those pairs, so this is not a consistent push-vs-PR code-path difference.
Diagnosis
High confidence: hosted-runner tail-latency jitter / benchmark flakiness, not a deterministic Ardur regression.
Evidence:
- identical tree and dependencies passed concurrently on another runner;
- failures include large p95/p99 stalls in the in-process benchmark, not only Unix-socket IPC;
- repeated same-SHA mixed outcomes occur historically;
- worker IDs and regions differ, so there is no shared process, socket, or filesystem race between the duplicate jobs.
The simultaneous push and PR workflows create duplicate benchmark samples and expose the flake, but direct cross-job interference is not established because the jobs run in separate VMs.
Current workflow semantics and release disposition
At 8af2340, .github/workflows/tests.yml:
- names the job
Latency benchmarks (informational);
- sets job-level
continue-on-error: true;
- excludes
latency-bench from the blocking tests aggregate's needs list.
main branch protection requires the aggregate tests context, not the raw latency job. Both same-SHA workflow runs concluded success, and the required aggregate tests check passed. The raw informational job still correctly records its own failed check for visibility.
Therefore this issue is parked as a CI-quality follow-up and does not block the current release. Do not make the latency job required until the acceptance criteria below are met.
Acceptance criteria
Decomposition — 2026-07-23
A fresh audit at exact dev dfe4905bccfa3189ab2ee97e0d8f206a711ec9d4 found three independently reviewable concerns. This issue is now the tracker and is linked to three formal subissues:
Original acceptance-criteria mapping:
Current disposition:
Summary
The GitHub-hosted
Latency benchmarks (informational)job is nondeterministic and currently lacks enough diagnostics to distinguish socket timeouts,EINTR, and other native read failures.This is not a v0.2.0 release blocker: the job is explicitly
continue-on-error, it is excluded from the requiredtestsaggregate, the exactdevpush passed all mandatory checks, and the aggregatetestscheck is green. It must be hardened before latency is promoted to a required gate.Exact same-SHA evidence
Both jobs tested head SHA
8af2340965a28894129a7300611f8dc210023776on 2026-07-23:The PR checkout used synthetic merge commit
51a98894b63f5fdfaba412b8e45595005c08b114, but its tree SHA wasa41b5d90ea17bf44e41fa88cb899ac519bebd939, exactly equal to the tree of8af2340965a28894129a7300611f8dc210023776. Both jobs used:2.336.020260714.240.13.13.14They ran on separate workers and regions:
73fe17d7-dcc9-4ace-bd40-6c0deb4ae076,centralusb3b12663-af79-4a89-914a-74343651b920,westusGitHub documents that each standard GitHub-hosted
ubuntu-latestjob runs in a fresh VM: https://docs.github.com/en/actions/reference/runners/github-hosted-runnersFailure evidence
Failed job:
173.36 ms, p95302.34 ms, p99504.39 ms11, empty stderr11, empty stderr2.84 ms, p9574.99 ms, p99171.95 ms74.98812900001894 < 103 failed, 1 passedPassing same-SHA job:
262.66 ms, p95277.94 ms, p99291.44 ms5.13 ms, p955.47 ms, p995.93 ms6.64 ms, p957.02 ms, p997.21 ms4.10 ms, p954.49 ms, p994.99 ms4 passedIn the generated native client, return code
11meansread()returned a negative value. The test configures a 100 ms socket timeout, so a receive timeout under scheduler stalls is the leading explanation, but the client collapses all negative read errors to code 11 and emits noerrno; the exact cause cannot be proved from the current log.Historical flake evidence
In the 20 most recent latency jobs inspected, 5 failed: a 25% observed failure rate.
Four same-SHA push/PR pairs produced one pass and one failure:
8af2340965a28894129a7300611f8dc2100237767b88e693f1228afa94584d3f997e92414eb892c8a1b561f2b06dc7892c2ab0106cf869da3944ddca23047fb8a21eb729852ae4690a3daf35a7616a87The event type alternated between the passing and failing member of those pairs, so this is not a consistent push-vs-PR code-path difference.
Diagnosis
High confidence: hosted-runner tail-latency jitter / benchmark flakiness, not a deterministic Ardur regression.
Evidence:
The simultaneous push and PR workflows create duplicate benchmark samples and expose the flake, but direct cross-job interference is not established because the jobs run in separate VMs.
Current workflow semantics and release disposition
At
8af2340,.github/workflows/tests.yml:Latency benchmarks (informational);continue-on-error: true;latency-benchfrom the blockingtestsaggregate'sneedslist.mainbranch protection requires the aggregatetestscontext, not the raw latency job. Both same-SHA workflow runs concludedsuccess, and the required aggregatetestscheck passed. The raw informational job still correctly records its own failed check for visibility.Therefore this issue is parked as a CI-quality follow-up and does not block the current release. Do not make the latency job required until the acceptance criteria below are met.
Acceptance criteria
errno(without logging request payloads, tokens, or sensitive paths).EINTRcorrectly by retrying the interrupted syscall; define and test the policy for transient receive timeouts without masking persistent socket, protocol, or daemon failures.Decomposition — 2026-07-23
A fresh audit at exact
devdfe4905bccfa3189ab2ee97e0d8f206a711ec9d4found three independently reviewable concerns. This issue is now the tracker and is linked to three formal subissues:EINTRretries, define timeout policy, and add deterministic native tests.Original acceptance-criteria mapping:
EINTRand timeout policy; deterministic native retry tests → fix(claude): preserve native response-read errno and bound EINTR retries #378Current disposition:
testsaggregate.