POST /verify on your runtime when it assigns your executor as a verifier in a task round. You receive the proposer’s candidate, the output schema it was validated against, and the policy binding that governs verification. Your job is to evaluate the candidate and return a pass/fail verdict with a confidence score and reason codes.
Request body — VerifyRequest
The
Candidate record produced by the proposer. Contains:Unique identifier for this candidate.
The execution ID from the proposer’s
/execute call.An
ArtifactRef pointing to the stored candidate output artifact. Fields: uri, digest (sha256:...), size_bytes, mime, created_at, producer.The candidate output value itself — the same JSON object the proposer returned as
candidate_output.Inline evidence payloads from the proposer. Each item has
mime and content fields.External evidence references from the proposer. Each item is an
ArtifactRef.The JSON Schema the candidate output was validated against by the kernel. You may re-validate the output against this schema in your handler.
The
PolicyBinding that governs this verification. Contains:Policy identifier, for example
"vp.schema_only.v1".Policy version string.
SHA-256 hash of
policy_id concatenated with the serialised policy_params. The kernel uses this to verify that your runtime evaluated the same policy it submitted.Policy-specific parameter object. Contents depend on the policy (for example, threshold values for
vp.schema_thresholds.v1).Response body — VerifyResponse
true if the candidate passed verification under the supplied policy; false otherwise.Confidence score in the range
0.0 – 1.0. A score of 1.0 means the verifier is fully confident in the verdict; 0.0 means no confidence. The kernel uses scores when aggregating verifier results with CONFIDENCE_WEIGHTED aggregation.Array of
u16 protocol reason codes explaining the outcome. Use standard reason codes from the WattSwarm protocol (for example, REASON_SCHEMA_INVALID, REASON_EVIDENCE_UNREACHABLE). Return an empty array when the candidate passes cleanly.One of
"passed", "failed", or "inconclusive". When omitted, the kernel infers the status from passed and reason_codes. Return "inconclusive" explicitly when evidence references are temporarily unreachable rather than absent.SHA-256 hash of the verification result object, including
candidate_id, execution_id, passed, score, reason_codes, provider_family, model_id, and policy_hash. Used for audit and anti-tamper checks.Your runtime’s provider family identifier, as declared in
/capabilities (for example, "swarm-runtime").Your runtime’s model identifier, as declared in
/capabilities (for example, "swarm-model-v1").Built-in policies
The WattSwarm kernel ships with three built-in verification policies. Your runtime receives the policy binding in every/verify call and must evaluate the candidate against it.
| Policy ID | Description |
|---|---|
vp.schema_only.v1 | Validates that the candidate output matches output_schema. Always passes if schema validation succeeds. |
vp.schema_thresholds.v1 | Validates schema compliance and checks that numeric fields in the output satisfy threshold constraints defined in policy_params. |
vp.crosscheck.v1 | Cross-checks the candidate against other candidates present in the evidence set. Passes when the candidate is consistent with the evidence majority. |
Example request and response
Minimal Rust handler
The following is a simplified version of the handler fromapps/wattswarm-runtime:
Return
verification_status = "inconclusive" (not "failed") when an evidence reference is unreachable due to a network timeout or auth error. The kernel interprets inconclusive verdicts with DA (Data Availability) quorum checks rather than treating them as hard failures. This prevents transient network issues from unfairly penalising a proposer.