Repository navigation
Actions model: wake-ups from the events contract; mutant: events only - #52
Merged
Merged
Conversation
…: events only An orchestrator replica ticks (`read`) only when woken. Every write to a branch or an object of the area is announced to all replicas; an announcement may be lost, repeated or reordered (a wake is a flag), and the safety poll and the start-up diff against the cursor (verify/events/events.qnt) wake a replica whatever it was told. Time passing announces nothing, so a lease that lapses is found only by the poll. - State `woken`; actions `wake` (safety poll / resume) and `lose` (announcement lost). - `noStranded` now also needs some replica to tick (`willTick`). - New switch SAFETY_POLL: off is "the orchestrator relies on events only"; the sim finds a stranded job (noStranded). mutate_actions.sh runs it with the other switches. - Scenario safetyPollSweepsRun; witnesses neverLostWake, neverPolled. - All earlier properties, witnesses, mutants and the 18 scenarios still pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Replaces #51 (its one commit replayed onto main after #50; tree identical to #51's head).
What
The Actions orchestrator will run
pail events --branch '*' --prefix actions/ --cursor <in the area>beside each replica and tick on each event. This makesverify/actions/actions.qntsay so, instead of letting a replica read at any time.read) only when woken (woken)._actions,_checksor an object of the area is announced to all replicas (announced). A wake is a flag, so a repeated or reordered announcement changes nothing;losedrops one.wakeis the safety poll (and the start-up diff against the cursor): it wakes a replica whatever it was told. This is the events model's contract: cursor resume plus safety poll, so a lost notification only delays a tick.noStrandednow needs some replica to tick (willTick: woken, mid-commit, or the safety poll will come).SAFETY_POLL: off = "the orchestrator relies on events only". The sim finds a stranded job (noStranded); it is inmutate_actions.shwith the other 13.safetyPollSweepsRun(runner dies, announcements lost, lease lapses in silence, only the poll wakes a replica, which sweeps); witnessesneverLostWake,neverPolled.Verification
npm test: 19 scenarios (18 existing, unchanged, plus the new one) pass.simulate:actions(60k runs,simSafety): no violation.witness:actions: all 7 reached.mutate:actions: all 13 existing switches,CAS+FENCE, and the newSAFETY_POLLare caught.🤖 Generated with Claude Code