# Runs and results

A run ID identifies a remote experiment. Exiting Python, closing a notebook or closing the browser does not cancel it. Reconnect with the same C3 account:

```
from c3 import C3

with C3() as client:
    run = client.research.get("ar_your_run_id")
    print(run.status, run.url)
    print(run.progress())
    print(run.results())
    print(run.configuration())
```

## Understand the run page[​](#understand-the-run-page "Direct link to Understand the run page")

Open **Autoresearch** in the dashboard sidebar to find runs. Ordinary compute jobs have their own **Jobs** section. Each research evaluation remains accessible through its parent run's private compute link.

The run page identifies the engine and version, selected language model and inference service, compute provider, hardware, and configured limits. A selected provider records the submission choice. With no provider selected, C3 routes the job automatically; inspect the compute job for its actual placement.

The engine adapter supplies the overview diagram, which marks the current state. Open **Run settings** to inspect requested and effective engine/C3 configuration and the adapter version. Detailed steps show measured outcomes. The completed evaluation count excludes generation and scoring steps, and the OpenEvolve best score uses `combined_score`, where higher is better. Improvement is the absolute difference from a valid baseline. An invalid baseline has no score, even if later candidates succeed.

Program logs show setup messages and the program's stdout and stderr. Host diagnostics belong to verbose debugging streams rather than the normal output. Artifacts use authenticated access; sharing a research URL does not grant access to its run, child jobs or files.

## Collect results[​](#collect-results "Direct link to Collect results")

`run.results()` returns a `result` that can be null. On success it contains the selected evaluation, program code, metrics and artifact/checkpoint references. Use the page's result download or follow an evaluation to download its files.

When a run fails, is cancelled or loses its controller, completed step metrics and evaluation artifacts remain available. A final best-program bundle is not guaranteed for such a run. The page distinguishes partial results from a completed best result and retains the last reported state of unfinished work.

## Wait or cancel[​](#wait-or-cancel "Direct link to Wait or cancel")

`run.wait(timeout=300)` waits locally for up to five minutes. A local `TimeoutError` ends that wait and does **not** stop remote work. The campaign's own limits are independent. You can instead inspect progress whenever convenient.

To stop the campaign explicitly:

```
with C3() as client:
    run = client.research.get("ar_your_run_id")
    run.cancel()
    print(run.refresh().status)
```

The page also offers cancellation with confirmation. Cancellation prevents new work and stops active child jobs. Repeated cancellation is safe. Previously incurred charges remain, and accounting can settle after the terminal state appears. Unused reservations are released through the normal billing process.

## Handle failures[​](#handle-failures "Direct link to Handle failures")

An invalid candidate can fail its evaluation while the engine continues its search. A campaign deadline stops further work and cancels active evaluations. Credit or campaign-budget exhaustion can prevent the next evaluation or model call from being admitted.

The current pilot does not automatically resume an engine after controller loss. C3 detects a stale heartbeat, marks the run interrupted and cancels its active compute. Detection uses a three-minute stale-heartbeat threshold plus scheduled reconciliation. Completed results remain readable. Reconnecting or replaying the original submission does not launch the engine again.

Create a new submission with a new idempotency key only when you want a new campaign. Contact your pilot operator if reservations remain unresolved; another submission does not repair an uncertain charge.
