fix: coordinate reminders across processes#3
Open
kernel-oops wants to merge 1 commit into
Open
Conversation
This was referenced Jul 25, 2026
Author
|
A consolidated integration PR is now available at #5. It deliberately combines #2, #3, and #4, resolves their overlapping scheduler changes, and adds regression fixes found while stress-testing the combined lifecycle. This PR is left open for history/discussion, but the consolidated PR is the recommended merge path. |
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.
Summary
Prevent independent OpenCode processes on the same host from submitting the same persisted reminder occurrence concurrently.
/procstart identity)Scope and delivery semantics
This coordinates processes on one host sharing a local filesystem with atomic hard links, exclusive creation, and rename. It does not claim cross-host/NFS safety.
Prompt delivery remains at-least-once across the unavoidable ambiguity where prompt acceptance succeeds but a process, storage, or lock failure prevents the durable post-prompt transition. True crash-proof exactly-once delivery would require an idempotency key supported by the prompt API. These boundaries, conservative stale-lock behavior, and the cancellation race after durable validation are documented in the README.
Tests
Verified locally:
The lease test was also repeated five times successfully.
Relationship to #2
This PR is intentionally based directly on
mainand fixes a separate cross-process ownership problem. PR #2 addresses same-process cancellation/generation races. Both touchscheduler.ts,index.ts, and related tests, so they will require a deliberate integration after either merges; this PR does not claim to include #2's prompt-abort behavior.