monad-developers / monad-developers/ultrafuzz

Modal retry ignores an exact collision already terminal in the retained stream

Open
#733 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

deferred-post-v0.1
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:

  1. Append one complete same-run sequence: RunStarted, matched frame/snapshot pairs, and terminal RunFailed whose cause is exactly:

    Command failed: git read-tree --reset -u aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    fatal: Unable to create '/tmp/generic-linked-worktree/index.lock': File exists.
    
  2. Fingerprint that stream.

  3. Simulate retry-task returning the exact RETRY_TASK_FAILED JSON plus exact reset-finished / starting-run pre-ownership logs, but no collision cause.

  4. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.