monad-developers / monad-developers/ultrafuzz
Modal retry ignores an exact collision already terminal in the retained stream
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 85
- Forks
- 18
- Avg merge
- 11h 10m
- Merged PRs (30d)
- 194
Description
Summary
In release/v0.1.0, Modal exhausted-task recovery can have a complete exact selected-worktree lock-collision terminal sequence already at the tail of the retained workflow stream. The subsequent exact retry-task command then reports reset/start pre-ownership failure, appends no event, and does not preserve the collision cause in its command output. The worker checks only current command output or a suffix appended after the retry fingerprint, so it ignores the existing terminal proof and fails before ownership.
Generic reproduction
Use an in-memory NDJSON stream and /tmp/generic-linked-worktree/index.lock:
-
Append one complete same-run sequence:
RunStarted, matched frame/snapshot pairs, and terminalRunFailedwhose cause is exactly:Command failed: git read-tree --reset -u aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa fatal: Unable to create '/tmp/generic-linked-worktree/index.lock': File exists. -
Fingerprint that stream.
-
Simulate retry-task returning the exact
RETRY_TASK_FAILEDJSON plus exact reset-finished / starting-run pre-ownership logs, but no collision cause. -
Append no event; the stream stays byte-identical. The selected lock is absent after the subprocess exits.
Observed predicates:
{
"preceding_terminal_exact_collision": true,
"command_preownership_shape": true,
"current_command_exact_collision": false,
"stream_unchanged": true,
"delayed_suffix_present": false,
"selected_lock_present_after_exit": false
}
The release worker rejects this state even though the retained stream and current command together prove the same narrow pre-ownership recovery boundary.
Expected behavior
Within the existing three-command cap, retry only when all of these hold:
- the stream already ends in a complete same-run terminal exact selected-lock collision with no
NodeStarted; - retry-task has the exact reset/start pre-ownership command shape;
- the stream remains byte-identical across retry-task;
- the selected lock is absent after the subprocess exits.
Unexpected stream events, unrelated terminal causes, current ownership, unsafe or remaining locks, and exhausted retry bounds must remain terminal.
Version
- Branch:
release/v0.1.0 - Commit:
9b0bc8cab2e681bbffeee385c1f80f85a47087d3
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in the release/v0.1.0 worker at commit 9b0bc8cab2e681bbffeee385c1f80f85a47087d3 and reproduce the in-memory NDJSON sequence with the selected index.lock collision. Trace retry-task handling around the retained terminal stream and verify the three-command cap. Done means the exact pre-ownership conditions permit retry while unrelated events, ownership, unsafe locks, and exhausted bounds remain terminal.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- git, typescript
- Domain
- testing
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100