Are you an LLM? View https://a3s-lab.github.io/Code/llms.txt for optimized Markdown documentation, or https://a3s-lab.github.io/Code/llms-full.txt for full documentation bundle. This page is also available as Markdown at https://a3s-lab.github.io/Code/v6.5.1/en/guide/verification.md
The harness treats "done" as something that must be proven, not merely
claimed. When the model says a task is complete, that assertion is worth nothing
on its own. Verification turns the claim into evidence: you declare commands
that must succeed, the runtime executes them, and the result carries a report
you can inspect, gate on, or surface to a user.
Verification is session-scoped. The Rust core runs each command, records its
exit status and output, and rolls every report up into a single summary that
travels alongside the turn result.
Product UIs can present a delivery summary first, followed by the command output
and file-level changes used to support it.
A verification command is a small, named check: an id, a kind, a
human-readable description, and the command to run. Mark a check required
when a failure should be treated as a hard failure rather than a warning.
Every turn's send() result also carries read-only verification fields, so you
can gate on the outcome without issuing a separate verification call. Use these
to decide whether the turn actually accomplished what it claimed.
Node.js
Python
TypeScript
constresult=awaitsession.send('Apply the fix and run the checks');
console.log(result.verificationStatus);
console.log(result.pendingVerificationCount);
console.log(result.failedVerificationCount);
console.log(result.verificationReportCount);
console.log(result.verificationSummaryText);
if(result.failedVerificationCount>0) {
thrownewError('Turn reported done but verification failed');
}
Python
result=session.send('Apply the fix and run the checks')
print(result.verification_status)
print(result.pending_verification_count)
print(result.failed_verification_count)
print(result.verification_report_count)
print(result.verification_summary_text)
ifresult.failed_verification_count>0:
raiseRuntimeError('Turn reported done but verification failed')
Beyond the per-turn fields, the session exposes the full set of reports, a
structured summary, the available presets, and a human-readable digest. The
digest is the quickest way to show a person why a turn passed or failed.
// Either the session helper or the standalone formatter yields readable text.
console.log(session.verificationSummaryText());
console.log(formatVerificationSummary(summary));
Python
reports=session.verification_reports()
summary=session.verification_summary()
presets=session.verification_presets()
# The session helper returns a ready-to-print human-readable digest.
print(session.verification_summary_text())
verificationPresets() returns workspace-aware check templates inferred from
files such as Cargo.toml, package.json, pyproject.toml, and go.mod.
Treat them as starting points: review the commands, timeouts, and required
flags for the project before gating releases or user-visible automation.
Without verification, an agent run ends on the model's word. With it, the run
ends on observable evidence: a build that compiled, a test suite that passed, a
linter that stayed quiet. The summary text gives you the audit trail; the
counts on the result let you fail closed in automation.