You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit c6188ef
Browse filesBrowse the repository at this point in the historyBrowse files
fix(apple-runner): restart without resending a command written then lost
A connect-shaped failure keeps its restart, but the command is sent again
on the restarted runner only with proof the first send could not have run
it: the attempt provably wrote nothing (a connect refused before the write,
dispatched no), the readiness preflight gave up before the write, or the
command is read-only by its runner trait. A mutating command whose first
attempt may have written it now fails with reason runner_reply_lost and
dispatched unknown after the restart; a restarted runner's journal is empty,
so no status answer can prove the first send did not run. A read-only
command's restart failure discloses no: a read has no side effect to repeat.
dispatch-disclosure.json: ios-runner.transport.written-then-lost keeps
unknown with a trigger that says the command is not resent;
ios-runner.transport.read-only-written-then-lost is new and discloses no.
Tests (runner-lifecycle-dispatch-disclosure, real connect loop over a
stubbed fetch and simctl curl exit 28, restart succeeds):
- written-then-lost: tap restarts the runner, is not sent on the restarted
runner, fails unknown with reason runner_reply_lost. Mutation: make
canResendAfterRestart return true -> fails (the tap is replayed and the
request succeeds).
- read-only-written-then-lost: snapshot is sent again on the restarted
runner and its failure discloses no. Mutations: drop the read-only term
from canResendAfterRestart -> fails (no resend); drop the read-only
branch of discloseRestartDispatch -> fails (unknown).
runner-command-retry: four mutating-restart fixtures now carry the proof a
real refused connect stamps (dispatched no); without it they would test the
removed replay.
Copy file name to clipboardExpand all lines: contracts/fixtures/dispatch-disclosure.json
+7-1Lines changed: 7 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -238,9 +238,15 @@
238
238
{
239
239
"id": "ios-runner.transport.written-then-lost",
240
240
"producer": "ios-runner",
241
-
"trigger": "a connect attempt posted the command and then timed out (fetch deadline, simctl curl exit 28); the failure keeps the runner_connect_refused restart verdict, and the restart that replays it failed",
241
+
"trigger": "a connect attempt posted a mutating command and then timed out (fetch deadline, simctl curl exit 28); the runner is restarted, and the command is not sent again because nothing proves the first send did not run",
"trigger": "a connect attempt posted a read-only command and then timed out (fetch deadline, simctl curl exit 28); the runner is restarted and the read is sent again, a read has no side effect, and the resend failed",
0 commit comments