monad-developers / monad-developers/ultrafuzz

Modal retry diagnostics discard structured command output when appending counters

Open
#730 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

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:

  1. Have the retained retry command exit nonzero with nonempty stdout and stderr.
  2. Catch its CloudWorkerCommandError and wrap it with new Error(summary, { cause: error }) to append counters.
  3. Pass the wrapper to the worker error serializer.
  4. 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

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.