monad-developers / monad-developers/ultrafuzz
Modal retry diagnostics discard structured command output when appending counters
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 85
- Forks
- 18
- Avg merge
- 11h 10m
- Merged PRs (30d)
- 194
Description
Additional same-defect evidence from the default Modal recovery path:
attempts=1
signature_matches=0
byte_stable_streams=1
read_tree_signatures=0
lock_path_signatures=0
output_ownership_free=1
This proves the retained event stream remained byte-stable and no ownership token appeared, but the retry command produced a different failure shape. The bounded stdout/stderr needed to classify it is held on CloudWorkerCommandError; appending the aggregate counters currently wraps that object in a plain Error, so the normal worker serializer and failed checkpoint permanently elide the structured phase, exit code, stdout, and stderr.
Minimal generic reproduction:
- Have the retained retry command exit nonzero with nonempty stdout and stderr.
- Catch its
CloudWorkerCommandErrorand wrap it withnew Error(summary, { cause: error })to append counters. - Pass the wrapper to the worker error serializer.
- Observe that only the wrapper message survives; the bounded command output is absent.
The smallest correction is to append the counters while rethrowing the original structured command error, preserving the existing fail-closed retry predicates and output bounds.
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 at the default Modal recovery path and trace CloudWorkerCommandError into the worker error serializer, focusing on where aggregate counters are appended. Reproduce a nonzero retry with stdout and stderr, then verify that the serialized error and failed checkpoint retain the structured phase, exit code, and bounded output while retry predicates remain unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend, testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 66/100