Skip to content

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.

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 }

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.

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.

An assent clause asks a person. The run stops until the person answers.

- { layer: assent, clause: "The report is ready to send." }

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." }

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.