Skip to main content

Runtime logs

Runtime logs are Loom's structured runtime record for loom run --local. They are designed for pointer-first diagnosis: start with a receipt, open the JSON manifests, and land on the exact failing phase or step without scanning the whole run output.

Runtime phases

Loom records runtime progress as phases. The log tree and phase report help answer:

  • What failed?
  • Which phase did it fail in?
  • Was the runtime timeline itself valid?

How the pieces fit together

Use the receipt and manifests to find the right file first. Use the event streams only after you know which unit to inspect.

The files that matter most

FileWhy you open it
pipeline/summary.jsonConfirm pass or fail at the pipeline level
pipeline/manifest.jsonIdentify the first failing job and top-level artifact pointers
jobs/<job_id>/manifest.jsonBranch to either a failing step or a failing system section
jobs/<job_id>/user/execution/script/<NN>/events.jsonlRead the failing user-step evidence
jobs/<job_id>/system/<section>/events.jsonlRead provider, cache, artifact, or cleanup evidence
phase-report.jsonValidate phase coverage and ordering across the whole run

Choosing an artifact

NeedBest artifact
Find the failing job quicklypipeline/manifest.json
Find the failing commandfailing_step_events_path in the job manifest
Understand provider or cache failuresystem_sections[].events_path in the job manifest
See whether cache or artifact work was skippedSection summary.json or the matching manifest entry
Check whether Loom emitted the expected phase boundariesphase-report.json

Runtime phases you can rely on

The current runtime contract uses a small set of stable phase identities:

ScopePhase codePractical meaning
runrun.bootstrapLoom captured run context and workspace attribution
pipelinepipeline.executeThe pipeline body
jobjob.provider_prepareProvider and pre-execution setup
jobjob.cache_restoreOptional restore work before execution
jobjob.executionUser execution envelope for the job
stepexecution.scriptOne script step
jobjob.cache_saveOptional post-execution cache write
jobjob.cleanupTemporary-secret cleanup
jobjob.artifact_restoreRuntime-logs v2 compatibility identity for artifact_extract publication
runrun.finalizeFinal contract-artifact writeout

Not every job emits every optional phase. The point is that when the work happens, it is named consistently.

How to read an event stream

Every events.jsonl file is newline-delimited JSON. The current runtime contract uses three core event kinds:

EventWhat it means
phase_startA phase boundary opened
outputLoom captured output inside that phase
phase_finishA phase boundary closed, with status and duration_ms

Typical fields to watch:

FieldWhy it matters
scopeTells you whether the record is run, pipeline, job, section, or step scoped
phase_codeStable identity such as job.execution or job.cache_restore
phase_familyBroad family such as user, cache, or artifact
messageThe actual output line for output events
status, exit_codeThe outcome on phase_finish
metricsStructured skip or telemetry details on phase_finish

Skip behavior is explicit

Section summaries record explicit skips and their reasons.

Where to lookWhat you will see
System section summaries and manifest entriesstatus: "skipped" plus skip_reason and metrics.skipped: true when Loom explicitly skipped that work
Cache phasesMetrics such as hit, cache_name, cache_key, and skip_reason
Artifact phasesMetrics such as file_count, archive_path, and skip_reason
Jobs that never ranA skipped cleanup boundary rather than an absent job record

That makes it much easier to distinguish "not applicable", "skipped by policy", and "failed".

Loom publishes declared artifacts after cleanup. For compatibility, the system section is named artifact_extract and runtime-logs v2 uses the phase code job.artifact_restore.

Check the receipt's ArtifactPublication outcome and the section metrics for publication success, skips, or failures. For a failure, read the output line that records the operation (cleanup, copy, export, match, or archive), affected path, and error.

Fast triage path

For most failures, the shortest path is:

  1. Open the receipt and follow logs_dir.
  2. Open pipeline/summary.json.
  3. Open pipeline/manifest.json.
  4. Open the failing job's manifest.json.
  5. Read the pointed events.jsonl.
  6. Open phase-report.json only if you need coverage or ordering detail.

Sharing guidance

When you need help:

  • Share the receipt path first.
  • Then share one pointed events.jsonl path, not the whole log tree.
  • Include phase-report.json only if the issue is about missing or out-of-order phases.