Architecture Overview
AlphaDiana turns one YAML experiment config into task-level result records and a run-level report. The implementation is registry-driven: the runner imports built-in modules, resolves the configured benchmark, agent, sandbox, and scorer, and then executes one work item for each (task_id, sample_index) pair.
YAML + -o overrides
|
v
ExperimentConfig -> ConfigValidator
|
v
Runner.setup()
benchmark registry
agent registry
optional sandbox registry
scorer registry
|
v
Runner.run()
load tasks -> expand samples -> checkpoint filter
-> dispatch -> agent.solve(task, sandbox)
-> score -> ResultStore
|
v
task JSON + JSONL + artifacts -> RunSummary + report.md
Source references in these pages use file paths and symbols rather than mutable source line numbers. The central implementation is alphadiana/engine/runner.py (Runner.setup, Runner.run, and _run_decodingtrust_process_shards).
Configuration boundary
ExperimentConfig lives in alphadiana/engine/config/experiment_config.py. Its top-level fields include:
- component blocks:
agent,benchmark,scorer, and optionalsandbox; - execution controls:
max_concurrent,num_samples, retries,redo_all, and isolation settings; - DecodingTrust process isolation controls:
parallel_strategyandprocess_shards; - output and reporting controls:
output_dir,strict_report, and metadata.
num_samples is a per-run choice. The engine does not impose an AIME-specific sample count; pass@k experiments must set the intended value in their own config.
Dispatch and isolation
The normal dispatcher supports bounded in-process concurrency. Sandboxes may provide a fresh session per task, a pooled session, or a benchmark-specific task-bound session. swebench_container and decodingtrust both require the current task when creating a session.
DecodingTrust is a special cross-cutting path:
sandbox.name: decodingtrustdisables pooling and shared sessions;- in-process task concurrency is lowered to one because DTAP uses process-wide state;
parallel_strategy: process_shardswithprocess_shards > 1launches isolated child processes, assigns tasks round-robin, gives each shard separate ports and identifiers, and merges the shard result stores into the parent run;- OpenClaw selects its DTAP-native path with
agent.config.runtime_backend: decodingtrust_openclaw_cli.
See Sandboxes & Isolation for backend-specific boundaries.
Checkpoint semantics
Resume is scorer-aware. Without --redo-all, only records for the current scorer whose inferred status is valid_scored count as complete. Other records are rerunnable.
Supported harness timeouts are a deliberate exception to the intuition that every timeout is incomplete. DirectLLM, OpenCode, OpenClaw, and ZeroClaw can return finish_reason: timeout with score=0, correct=false, timeout metadata, and score_status: valid_scored; these rows are checkpoint-complete. Loading also normalizes legacy rows that contain explicit timeout evidence to this scored-zero form.
Provider failures, context overflow, control-plane failures, verifier anomalies, heartbeat/session taint, and other non-timeout errors remain incomplete and rerunnable. TerminalBench-2 additionally requires actual verifier reward evidence; skipped_duplicate is valid only with verifier_reward_observed=true and normal score fields.
Results and reporting
ResultStore persists one sample per task JSON file entry and one JSONL record per (task_id, sample_index). Result records include the response, score, status, trajectories, metadata, and references to larger artifacts. Reports compute accuracy, mean score, Pass@k, Avg@k, completion/error counts, and per-category variants.
DecodingTrust reports also expose denominator-scoped task-success and attack-success counts and rates. See Scoring & Results.
Terminology
- Dashboard UI: the React analysis application.
- live status file:
status/dashboard.txtwritten during a run. - homepage Dashboard section: the website landing-page section.
- Observability & Proxies: this documentation area, not a dashboard.
Next steps
- Engine & Runner — lifecycle, concurrency, checkpointing, and process sharding.
- Registries — the complete live component inventory.
- Sandboxes & Isolation — session contracts and backend boundaries.
- Scoring & Results — validity, storage, metrics, and sharing precautions.
- Observability & Proxies — proxy capture and trajectory preservation.