{"id":"09ff6b706ae9c61e","repo":"rust-lang/cargo","slug":"no-sessions-found-context-09ff6b","errorCode":null,"errorMessage":"no sessions found{context}","messagePattern":"no sessions found(.+?)","errorType":"exception","errorClass":"AlreadyPrintedError","httpStatus":null,"severity":"error","filePath":"src/ops/cargo_report/timings.rs","lineNumber":79,"sourceCode":"        } else {\n            String::new()\n        };\n        let (title, note) = if let Some(id) = &opts.id {\n            (\n                format!(\"session `{id}` not found{context}\"),\n                \"run `cargo report sessions` to list available sessions\",\n            )\n        } else {\n            (\n                format!(\"no sessions found{context}\"),\n                \"run command with `-Z build-analysis` to generate log files\",\n            )\n        };\n        let report = [Level::ERROR\n            .primary_title(title)\n            .element(Level::NOTE.message(note))];\n        gctx.shell().print_report(&report, false)?;\n        return Err(AlreadyPrintedError::new(anyhow::anyhow!(\"\")).into());\n    };\n\n    let reader = BufReader::new(File::open(&log)?);\n    let iter = serde_json::Deserializer::from_reader(reader)\n        .into_iter::<LogMessage>()\n        .enumerate()\n        .filter_map(|(idx, msg)| match msg {\n            Ok(msg) => Some(msg),\n            Err(e) => {\n                tracing::warn!(\"failed to parse log message at index {idx}: {e}\");\n                None\n            }\n        });\n    let ctx = prepare_context(iter, &run_id, true)\n        .with_context(|| format!(\"failed to analyze log at `{}`\", log.display()))?;\n\n    // If we are in a workspace,\n    // put timing reports in <target-dir>/cargo-timings/` as usual for easy access.","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/rust-lang/cargo/blob/0e07a155371a6ce88ae53a2c00df940280c09a67/src/ops/cargo_report/timings.rs#L61-L97","documentation":"`cargo report timings` needs a build-analysis log to render timing reports. find_log_file returns None when no log exists for the workspace or the supplied --id, so timings.rs:79 bails with 'no sessions found'. Like the sibling commands, logs are produced only with -Z build-analysis.","triggerScenarios":"Running `cargo report timings` without a prior `-Z build-analysis` build, or with an --id that does not correspond to any stored session.","commonSituations":"Confusing `cargo report timings` with the stable `--timings` build flag; clean log dir; stale --id.","solutions":["Build first with analysis enabled: `cargo +nightly build -Z build-analysis`, then `cargo report timings`.","Use `cargo report sessions` to discover valid --id values.","For per-build HTML timing reports without the unstable flag, use `cargo build --timings` instead."],"exampleFix":"# before\n$ cargo report timings\nerror: no sessions found\n\n# after\n$ cargo +nightly build -Z build-analysis\n$ cargo +nightly report timings\n# (or, for stable per-build HTML timings:)\n$ cargo build --timings","handlingStrategy":"validation","validationCode":"# Verify a session log exists before reporting timings:\nlog_dir=\"${CARGO_TARGET_DIR:-target}/build-analysis\"\nif [ ! -d \"$log_dir\" ] || [ -z \"$(ls -A \"$log_dir\" 2>/dev/null)\" ]; then\n  echo \"no sessions; run: cargo +nightly build -Z build-analysis\" >&2\n  exit 1\nfi\ncargo report timings","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run a real build with `-Z build-analysis` before `cargo report timings`.","Use `cargo report sessions` to discover valid --id values.","For stable per-build HTML reports, use `cargo build --timings` instead."],"tags":["report","timings","build-analysis","experimental","nightly"],"analyzedSha":"0e07a155371a6ce88ae53a2c00df940280c09a67","analyzedAt":"2026-08-06T01:46:58.334Z","schemaVersion":2}