#[non_exhaustive]pub struct DiagnosticDumpResponse {
pub recent_subprocesses: Vec<SubprocessRecord>,
pub sessions: Vec<SessionSummary>,
pub sim_health: String,
pub supervisor_pid: Option<u32>,
pub uptime_ms: u64,
pub alive_cache: AliveCacheCounters,
pub session_counters: SessionLifecycleCounters,
pub metro_log_tail: Vec<String>,
pub recent_flows: Vec<FlowAttemptRecord>,
pub last_interactive_named_ids: Vec<String>,
}Expand description
POST /diagnostic/dump response body (v1.0.7 §D5, extended
v1.0.11 §D1/§D4/§D5).
Snapshot of the runner’s runtime state: recent subprocess invocations, currently-open sessions, sim health state, supervisor pid, plus the always-emitted app-alive cache + cumulative session lifecycle counters that answer “is the observability instrumented?” as a numeric question, not a grep for a log line that may or may not survive a supervisor cycle.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.recent_subprocesses: Vec<SubprocessRecord>Recent xcrun simctl invocations recorded by the runner’s
subprocess ring buffer. Ordered oldest → newest, capped at 128.
sessions: Vec<SessionSummary>Every session currently known to the runner (mirrors
/session/list; embedded here for one-shot dump).
sim_health: StringCoarse sim-health classification at dump time.
supervisor_pid: Option<u32>Pid of the supervisor sidecar, when spawned via
smix runner up --supervise (v1.0.6 §D1).
uptime_ms: u64Runner wall-clock uptime in milliseconds.
alive_cache: AliveCacheCountersv1.0.11 §D1 — always-present. wired=false when the runner
didn’t have an AppAliveCache wired at boot (opt-out) or
predates this observability. When wired=true, the counter
fields reflect an actual live cache — even all-zero is
meaningful (“workload didn’t fire the re-probe path”).
session_counters: SessionLifecycleCountersv1.0.11 §D4/§D5 — cumulative session lifecycle counters. Advance
on every mutation, survive close, persisted alongside the
v1.0.5 session-persistence file so smix runner cycle doesn’t
wipe them.
metro_log_tail: Vec<String>v1.0.14 Cluster B / §5 — trailing N lines from the external
metro log the CLI was told to tail (via --metro-log <path>
on smix run or smix diagnostic dump). Empty when the CLI
was not given a log path OR when the file was unreadable at
dump time. Default N is 200 lines; consumer overrides with
--metro-log-tail-lines <N>. Purely additive — a pre-v1.0.14
consumer ignoring this field sees no behavior change.
recent_flows: Vec<FlowAttemptRecord>v1.0.14 §6 — retry-attribution roll-up. Populated by
smix run when it has driven at least one flow. Each entry
carries per-attempt status + errorClass + any .ips generated
so consumers can tell “flow X passed on retry 2 after retry 1
crashed” from “flow X passed on the first try”. Empty when no
flow context available at dump time.
last_interactive_named_ids: Vec<String>v1.0.19 — most-recent interactiveNamedIds sample observed
across all launchApp completions since runner boot. Survives
session teardown so post-batch triage can see WHICH ax-ids
triggered reachedInteractive on the last observed launch,
not just the count. Empty when no launch this run.
Per-session values (v1.0.18) remain on sessions[n].interactiveNamedIds
but go with the session at teardown. This top-level field is
the last-values-standing for post-mortem observation. Insight
round-4 §Ask.
Trait Implementations§
Source§impl Clone for DiagnosticDumpResponse
impl Clone for DiagnosticDumpResponse
Source§fn clone(&self) -> DiagnosticDumpResponse
fn clone(&self) -> DiagnosticDumpResponse
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more