monad-developers / monad-developers/ultrafuzz
Modal exhausted-task recovery retry rejects validated workflow relocation
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 85
- Forks
- 18
- Avg merge
- 11h 10m
- Merged PRs (30d)
- 194
Description
Generic reproduction: relocated Modal retry omits durability acknowledgement
Captured: 2026-08-21T19:14:05Z
UltraFuzz release base: 9b0bc8cab2e681bbffeee385c1f80f85a47087d3
Affected surface: the release's Modal node worker recovery for a generic external Solidity target. No target identity, prompt, source path, business logic, or finding is included here.
Preconditions
- A Modal node has a persisted inner workflow run under the worker's durable workspace.
- Callback termination has exhausted the selected inner task's attempts.
- A later worker resumes the same durable workspace through UltraFuzz's supported outer retry path.
- The worker presents the immutable workflow from its validated relocated snapshot path, so the inner runtime observes the expected workflow-path/module-root/VCS-root relocation.
Minimal release-owned check
Run against the built release helper:
import { workflowRetryTaskCommandArguments } from "./packages/modal/dist/node-worker.js";
const args = workflowRetryTaskCommandArguments(
"/durable/relocated-workflow.tsx",
"generic-external-run",
"node:analysis"
);
if (!args.includes("--accept-workflow-change")) process.exit(1);
Observed output on the affected worker:
{"command":"retry-task","has_accept_workflow_change":false,"uses_force":true,"node_scoped":true}
Observed exit code: 1.
The preceding ordinary resume is intentionally conservative. Once its exact-task diagnosis reports retries-exhausted, however, the worker invokes retry-task without --accept-workflow-change. The bundled runtime rejects the retry with RETRY_TASK_FAILED and reports that workflow path, module graph, and VCS root changed, explicitly requiring --accept-workflow-change to re-bless this run in place.
Expected
The narrowly gated exact-task recovery should acknowledge the worker-owned, already-validated relocation when invoking retry-task, while leaving ordinary resume, missing-run fallback, and unrelated failures unchanged.
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 packages/modal/dist/node-worker.js and trace workflowRetryTaskCommandArguments, then inspect the exact-task retries-exhausted recovery path. Run the supplied release-helper check against the relocated workflow arguments; done means that narrowly gated retry includes --accept-workflow-change while ordinary resume, missing-run fallback, and unrelated failures remain unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- node.js, typescript
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 84/100