Satisfaction
The satisfaction clauses are the proof that the work is complete. The
registrar checks them, and the registrar ends the run when they pass.
satisfaction: all: - { layer: letter, run: "pytest -x -q", exit: 0 } - { layer: judgment, clause: "The diff addresses the cause, not the symptom." }The model does not decide that the work is complete. The model can say that the work is complete, and the registrar then makes these checks.
all and any
Section titled “all and any”The satisfaction field contains all or any. It must not contain both.
| Field | The work is complete when |
|---|---|
all |
Each clause passes. |
any |
One clause passes. |
satisfaction: any: - { layer: letter, run: "make verify", exit: 0 } - { layer: letter, run: "npm test", exit: 0 }Letter clauses
Section titled “Letter clauses”A letter clause runs a command and compares the exit code.
- { layer: letter, run: "pytest {failing_test} -x -q", exit: 0 }| Field | Purpose |
|---|---|
run |
The command. |
exit |
The exit code that the command must give. |
The command follows the same rules as a shell grant. No shell operator is permitted, and no expansion is permitted.
A letter clause is the strongest proof that Writ has. A test suite that exits with code 0 is a fact.
Judgment clauses
Section titled “Judgment clauses”A judgment clause is prose. A judge model reads the clause, reads the actions of the run, and then makes a decision.
- { layer: judgment, clause: "The diff addresses the cause, not the symptom." }The judge is a different model from the holder, so the agent does not grade its own work. You must configure a judge.
Trust a judgment clause as much as you trust a model. Use a judgment clause for a condition that no command can check.
Assent clauses
Section titled “Assent clauses”An assent clause asks a person. The run stops until the person answers.
- { layer: assent, clause: "The report is ready to send." }Write the letter clause first
Section titled “Write the letter clause first”A satisfaction block with only judgment clauses proves little. Start with a command that already tells you that the work is correct: your test suite, your linter, or your build.
satisfaction: all: # A fact. - { layer: letter, run: "pytest -x -q", exit: 0 } # An opinion, and a useful one. - { layer: judgment, clause: "The diff addresses the cause, not the symptom." }If you write no satisfaction clause
Section titled “If you write no satisfaction clause”The satisfaction field is optional. Without it, the run has no proof of
completion, and the run ends when the model stops or when a bound stops the
run.
Write a satisfaction clause for each writ that changes something.