Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsTo 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.
#1 Best Overall
- Used Book in Good Condition
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.
Rank #2
Enter a running step when process state matters
For a live step, run a command in that step’s own executor and workspace with:
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.
Rank #3
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:
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchsenro 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
- 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.
Recheck cached purity claims without overreading the result
To re-execute cached pure steps for a diagnostic comparison, use:
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Best Value
- Used Book in Good Condition
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.
Quick Recap
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.

