1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# Ralph verification gate - bundled safety seed (#1902, ships the intent of #872).
#
# The plan tool reads this file before accepting a task completion claiming
# success. A `ralph_loop.toml` at the session working dir wins over this
# fallback, per-project (#947).
#
# enabled = true turns on the criteria gate: a task that completes while
# declaring acceptance criteria whose task type has NO verification command
# configured is logged Uncertain, not Verified ("silence is not proof",
# #870). The criteria gate itself rejects nothing; only a command that exits
# non-zero blocks a completion, whether it comes from the per-type table below
# or from a task's own locked spec check.
[]
= true
= true
# downgrade (default) = accept but record Uncertain
# strict = reject the completion outright
# off = criteria stay advisory, no enforcement
= "downgrade"
# Per-task spec checks (#1904). A task locks one command read out of its own
# acceptance criteria when it starts, and the gate runs that exact command when
# the task completes. The lock is the point: the command is hashed at start, so
# a criterion edited afterwards no longer matches and is not silently trusted.
#
# advisory (default) = a failing check logs the completion Uncertain
# block = a failing check rejects the completion
# off = no per-task checks run; criteria stay advisory
= "advisory"
# Generate a spec check when the criteria name no runnable command (#2063).
# When a task starts with acceptance criteria that are prose only, the model is
# asked once for a command that would prove the task, and the answer is locked
# exactly like a criteria-derived one.
#
# Cost: at most one small model call per task, and only for tasks whose criteria
# carry no runnable command. Tasks that already name their command are never
# sent to the model.
#
# The model may answer none, and none is the expected answer for a task it
# cannot test. A failed or unparseable call is not a failed start: the task
# starts as it always did, with no check locked.
#
# A generated check is advisory-only until you confirm it. Until then it can
# never reject a completion, not even under spec_checks = "block": it runs,
# reports, and the completion is downgraded at most. Confirm it by starting the
# task again with confirm_spec_check = true, or replace the prose criteria with
# the command you actually want.
= true
# Commands per task type. A type with no entry verifies nothing (policy
# above decides how that is graded). Add commands that RUN AND PASS in this
# project: a command that cannot execute here blocks every completion of
# that type. Start with none; add when you have a receipt it works.
#
# [[verification.task_type_commands]]
# task_type = "build"
# commands = ["cargo clippy --all-features -- -D warnings", "cargo test"]
#
# [[verification.task_type_commands]]
# task_type = "test"
# commands = ["cargo test"]
[]
= 20
= true
= true