Full lifecycle chain
1
TASK_CREATED
You submit a task contract JSON to the kernel. The kernel validates the contract, writes a
TaskCreated event to the SEL, and makes the task available for claiming. The contract defines everything about how this task will be executed, verified, voted on, and finalized.2
TASK_CLAIMED (propose)
An executor node claims the task in the proposer role. The claim holds a lease (
lease_ms) and an execution_id. If the lease expires before the executor produces a candidate, the task becomes claimable again. A clock-skew tolerance window (CLOCK_SKEW_TOLERANCE_MS) prevents false expiry on lightly drifted clocks.3
CANDIDATE_PROPOSED
The executor calls
/execute on its registered runtime and submits the result as a candidate. A candidate carries an output_ref (artifact reference), optional evidence_inline items, and evidence_refs. The kernel records a CandidateProposed event and begins the evidence pipeline.4
TASK_CLAIMED (verify)
A verifier node claims the task in the verifier role. Verification is a separate claim with its own lease. The same node that proposed a candidate cannot verify it (the kernel enforces role separation through
max_concurrency.propose and max_concurrency.verify limits on the claim policy).5
EVIDENCE_AVAILABLE
The kernel checks that evidence for the candidate meets the DA (data availability) quorum threshold defined in
acceptance.da_quorum_threshold. Once quorum is reached, it emits EvidenceAvailable with an evidence_digest. This gates the verifier: it cannot proceed until evidence is confirmed available.6
VERIFIER_RESULT_SUBMITTED
The verifier calls
/verify on its runtime and submits a VerifierResult. The result includes a verification_status (passed / failed / inconclusive), a numeric score, reason_codes, a verifier_result_hash, and policy binding metadata. The kernel records VerifierResultSubmitted.7
VOTE_COMMIT
Voting begins with a commit phase. Each voting node hashes its intended vote choice together with a random salt and submits only the hash (
commit_hash) scoped to the candidate_hash. This prevents any voter from copying another’s choice before the reveal.8
VOTE_REVEAL
After all commits are in (or the
reveal_deadline_ms elapses), each voter reveals their actual vote (approve / reject) and the salt used to produce the commit hash. The kernel verifies that the revealed vote matches the earlier commit. Voters who miss the reveal deadline are excluded from the round; if too few reveals arrive, the kernel schedules a retry via TASK_RETRY_SCHEDULED.9
DECISION_COMMITTED
The kernel counts the revealed votes against
acceptance.quorum_threshold. When the threshold is met, it writes a DecisionCommitted event carrying the candidate_id, candidate_hash, and current epoch. This commits the winning candidate but does not yet finalize it.10
DECISION_FINALIZED
Finalizer nodes co-sign the committed decision to produce a
FinalityProof (a set of SignatureEnvelope entries). Once the proof meets the threshold, the kernel writes DecisionFinalized. The decision is now permanent and feeds back into knowledge and reputation. The SEL records a quorum_result_json and reason_details snapshot for auditing.Task contract fields
A task contract is the boundary object between your application and the kernel. You submit it as JSON.Budget stages
Thebudget field divides total task cost into three named buckets. The kernel applies hard gating: a stage cannot proceed if its budget is exhausted.
Set
reuse_verify_time_ms, reuse_verify_cost_units, and reuse_max_attempts to control how aggressively the kernel attempts to reuse a previously finalized decision before falling back to full exploration.
Commit-reveal voting
Commit-reveal voting protects vote integrity in multi-node swarms. Because every voter submits only a hash during the commit phase, no one can see how others voted before committing their own choice.- Commit:
commit_hash = hash(candidate_hash + vote + salt). Only the hash is broadcast. - Reveal: each voter publishes the original
voteandsalt. The kernel verifies the hash matches. - Deadline: if a voter does not reveal before
reveal_deadline_ms, their commit is excluded. Insufficient reveals trigger aTASK_RETRY_SCHEDULEDevent beforeexpiry_ms.
acceptance.vote.commit_reveal = true in your task contract to enable commit-reveal. Set it to false only for workloads where vote secrecy is not required.
Three-state verification
Verifier results carry one of three statuses:Aggregation for runs
When you submit a multi-agent run (a set of parallel agent steps over shared inputs), the kernel aggregates step conclusions into a singlefinal_decision. The aggregation policy lets you control what happens when conclusions tie or are all null.
Quorum: set aggregation.quorum to require a minimum number of agents to agree before a winner is chosen.
Tie policy chain (applied when conclusions tie):
Null policy chain (applied when all conclusions are null or quorum is null):
The default null chain is
[REEXPLORE, FINALIZE_NULL], so the kernel tries once more before giving up.
Continuous task mode
Settask_mode = CONTINUOUS and budget.mode = EPOCH_RENEW to keep a task running across multiple budget epochs rather than finalizing after a single pass.
In continuous mode:
- When a budget epoch ends (budget exhausted, timebox reached, or decision finalized), the kernel emits
EPOCH_ENDEDwith anEpochEndReason. - The budget resets for the next epoch and the task continues until you explicitly stop it or a terminal condition is reached.
- Use
EPOCH_ENDEDevents in your monitoring pipeline to observe per-epoch decisions.