Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To debug a Senro pipeline, first replay the run’s recorded events, then inspect the recorded plan and workspace that produced them. Use senro shell only while a step is running; explain cache misses with senro cache explain; and use the recorded plan when repeating the same graph. These tools answer different questions, and choosing the right one avoids confusing a skipped step with a failed one or a repeat run with regenerated work.

Find the run and replay its events

List recent runs, then attach to the run you want to inspect in plain text:

senro runs -n <count>
senro attach --run <id> --ui=plain

A completed run can be reopened for retrospective viewing. Senro’s client can display the recorded events offline, while an attachment to a live run can report current state and follow new events. As software engineer and guide author Xavier Portilla Edo puts it, “Every observable fact about a run is an event, appended in order, never rewritten.” The event stream and the plan serve different purposes: events.jsonl records observable run events in append order; plan.json records the graph that ran.

Read step states, not just the final status

A failed step and a dependent step marked skipped_upstream_failed are not the same diagnosis. The first ran and failed; the second did not execute because its upstream dependency failed. A recovered step ultimately passed after a retry, which can reveal transient infrastructure trouble that a single green final status would conceal.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Inspect the graph and retained workspace

Use the recorded plan to check which dependencies and fan-out results were actually executed rather than assuming the current pipeline definition would reconstruct the same graph. For a quick dependency inspection, query plan.json with jq; for example, print its contents first and then adapt the filter to the plan’s structure:

jq '.' plan.json

For workspace state, senro ws ls and senro ws diff inspect stored indexes. To materialize a workspace snapshot from an ended run for local inspection, use senro ws pull. This is retrospective file inspection, not access to a live process.

A pulled snapshot is not a byte-for-byte image of the host filesystem. The guide states that snapshot modes are normalized to 0644 or 0755 and modification times are fixed at the epoch. UID, GID, extended attributes, ACLs, hard links, and devices are not preserved. If a permission or metadata discrepancy matters, account for those transformations before attributing it to the pipeline.

Enter a running step when process state matters

For a live step, run a command in that step’s own executor and workspace with:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
senro shell --pid <pid> --step <step> -- <command>

The session is read-only and does not receive secrets. Add --tty when the command needs a real terminal; the guide documents this option for local, container, and Kubernetes executors. Shell access requires a running step and an available engine. After the run ends, retrieve its workspace with senro ws pull instead.

Attaching and shelling into a step are separate operations. If the pipeline uses attach.Listen, an attached client can also issue controls such as pause, resume, retry, skip, rerun from a step, or set a breakpoint. Those controls affect execution; a shell session remains read-only.

When a command fails before producing output

If a command exits with status 127 and no output, inspect the work directory and executable path: the process may not have started. On the local executor, a subpath beneath a mount can be passed as a literal host path if it does not exactly match a mount point.

Explain a cache miss by comparing key components

Ask Senro which parts of the key differ between runs:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
senro cache explain --run <id> <step>

Inspect both changed and unchanged components. The guide lists command, environment, secret identity (not secret values), executor class, platform, input digests, workspace digests, mount shape, step shape, function identity, tool versions, and version among the key inputs.

Rank #4
Sale
1,000 Books to Read Before You Die: A Life-Changing List
  • Book - 1, 000 books to read before you die: a life-changing list (1000 before you die)
  • Language: english
  • Binding: hardcover

Pay particular attention to workspace_digests. Every mounted workspace contributes its full digest, so an edit that looks unrelated to a step’s declared Inputs can still cause a cache miss if it changes content anywhere in a mounted workspace. Portilla Edo highlights this in the guide: “The one that catches people is workspace_digests: every mounted workspace enters the key in full.”

Also consider read-only mount behavior when investigating cache assumptions. The guide says local and SSH executors check senro.RO after the fact, while container and Kubernetes executors rely on kernel write refusal. Changes to a read-only mount can invalidate cache assumptions.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Recheck cached purity claims without overreading the result

To re-execute cached pure steps for a diagnostic comparison, use:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
senro verify --recheck-pure --run <id> --rerun

Senro restores throwaway trees based on the workspaces in the recorded cache key, reruns the cached pure steps, and compares results without writing a cache entry. A mismatch means outputs differed when the step was repeated against those restored inputs; it is a reason to investigate, not automatic proof of impurity. Nondeterministic output and external side effects are separate questions.

This check does not sandbox network access, so it cannot establish that a step had no external side effects. Treat it as a reproducibility diagnostic, not a security boundary or proof of isolation.

Repeat the recorded plan or regenerate work

To repeat the graph represented by the run’s plan.json, use:

senro rerun --run <id>

Use --regenerate only when the goal is to ask generators for a fresh subgraph. That can produce different work from the graph captured in the original plan.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Quick Recap

SaleBestseller No. 4
1,000 Books to Read Before You Die: A Life-Changing List
1,000 Books to Read Before You Die: A Life-Changing List
Book - 1, 000 books to read before you die: a life-changing list (1000 before you die); Language: english
$19.37
Bestseller No. 5
The Developer’s Guide to Debugging: 2nd Edition
The Developer’s Guide to Debugging: 2nd Edition
Used Book in Good Condition
$19.95

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.