Conversation
The pipe router now locates every failure of the pipe it runs as a PipeRouterError chained to it, turning a foreign exception into a PipelexUnexpectedError first, and exposes an _as_pipelex_failure hook for host routers. PipeRouterError and PipelineExecutionError both report the root fault's identity, caller-facing flag and own message, prefixed with the failing pipe and its path, so a run reports the same failure in process, through a bridge or from a recovered worker report. ModelNotFoundError's message states the fact only; the local-deck remedy moves to the model panel, which `pipelex run` now renders for a run failure. The agent CLI's cause fields name the root fault. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FigDssaJrvNcmbnBedi7oq
A host router whose transport packed the location found on the far side now hands back a PipeRouterError rebuilt over the root fault's report, which the router raises untouched instead of locating it a second time. The hook's contract says the far side packs the root fault's own report, never a located one. A foreign exception that the router located no longer reads as the bundle's failure: the bundle validator's sweep and the validate graph step find it with find_foreign_fault() and let it propagate. validate bundle's graph and view arms report the root fault's cause fields. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FigDssaJrvNcmbnBedi7oq
A foreign exception raised from an older PipelexError no longer lets the walk reach that older error: the stand-in is the fault, so a programming bug still propagates out of dry runs. A PipelexError raised from one of its own class restates the fault with added context (a size-tier remedy, an item index), so the outer one is reported. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FigDssaJrvNcmbnBedi7oq
find_failure_location walked past a foreign exception to an older PipeRouterError, so a foreign exception raised from an earlier located failure was treated as located, re-raised raw and escaped the runner. It now stops at the first non-Pipelex exception, as the root-fault walk does, and the router converts and locates the new failure where it happened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FigDssaJrvNcmbnBedi7oq
Member
Author
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
A run failure's report now carries its root fault's identity and own message, prefixed with the failing pipe and its path, so a local run, a bridged run and a report recovered from a worker all agree. The pipe router locates every failure (a foreign exception becomes a PipelexUnexpectedError, and a host router adapts its transport through the new _as_pipelex_failure hook), and a programming bug still propagates out of dry runs. The local-deck advice leaves ModelNotFoundError's message for the model panel that pipelex run now renders.
Closes L-260925-e5f874
🤖 Generated with Claude Code
Summary by cubic
Run failures now report their root fault — the innermost Pipelex error behind the failure — located at the failing pipe, so a local run, a bridged run, and a report recovered from a worker all report the same failure.
Breaking changes
error_type,title,type_uri, caller-facing flag, and message are now the root fault's, with the message prefixed by the failing pipe and its path (Pipe 'summarize' failed (two_steps → summarize): …);pipe_codeandpipe_stackname the failing pipe instead of the entry pipe.PipeRouterErrorchained to it; a foreign exception first becomes aPipelexUnexpectedError, and a host router adapts its transport through the new_as_pipelex_failurehook. A programming bug now propagates out of dry runs instead of reading as the bundle's failure, and the location walk stops at foreign exceptions so one raised from an earlier located failure is located where it happened rather than re-raised raw.cause_typeandcause_messagefields naming the root fault;ModelNotFoundError's message states the fact only, with the local-deck remedy moved to the model panel thatpipelex runnow renders.Closes L-260925-e5f874.
Written for commit 004c6dd. Summary will update on new commits.