Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A caller abort arriving after an owned provider output-collection failure could relabel the physical failure as cancellation. Reverse-command observation now uses the owned command's recorded failure reason and retains the later caller cancellation separately.
Problem and expected behavior
An
OwnedCommandFailurewith reasonprocess, a captured output prefix, and anEIOcollection cause became anAnalysisCancelledErrorwhen the caller signal was aborted at delivery. The physical collection error should remain primary, with its exact cause chain and captured bytes available to the caller.Change and scope
The cancellation classifier uses
OwnedCommandFailure.reasonwhen that producer owns the outcome. The application completion boundary attaches later caller cancellation through the shared error owner. Recorded producer cancellation continues to produce a cancellation error. This repair fits the existing standalone command observation contract and was found during the repository audit.Contract and boundary impact
The owned process producer supplies the authoritative failure reason. The reverse application service preserves its classification through final delivery. Existing clients receive physical output errors plus the established secondary cancellation field. The captured snapshot, byte counts, and cause chain remain available.
The process-launch effect belongs to the existing objdump/rizin workflow. Validation injected outcomes at the owned runner boundary.
Evidence and regression coverage
The collection-failure test fails on base
a6e02657under late cancellation. The noncancelled physical-error control and producer-cancelled control pass before and after the repair. Final tests assert the physical error class, captured bytes, exact underlying failure objects, and exact caller cancellation reason.Validation performed
All commands used Node.js 24.22.1 in the isolated branch worktree.
npm run typecheck -- --incremental falsepassed.oxfmt --check,oxlint, andgit diff --checkpassed. Lint retained existing size, complexity, and parameter-count warnings.Compatibility, safety, and release
The repair uses existing output and secondary-error contracts. Tests use authored snapshots, controlled abort signals, and mocked runners. Real external commands, process termination, and native ownership controls were outside this verification.
Author readiness
Human owner:
Before merge
type(scope): outcome.