Reference
Endings a report cannot replace
Part of enforcement control, completion enforcement.
block-stop-on-own-work is a Stop gate. It refuses a turn that ends on a report instead of on the work the report itself describes, and it decides everything by structure, with no model: the transcript's own records, the tool calls made since the operator last spoke, and the claims the ending answer carries word for word.
#What the answer carries
What the answer says is its turn-end attestation: every claim this gate declares in standards/turn.json must stand in the ending answer word for word (runs of spaces and line breaks count as one space), and only when it is true. tama attestation standard --turn prints them; tama attestation check --turn block-stop-on-own-work --file <answer> gives this gate's verdict before the turn ends. The claims are:
- This answer gives no invented limit as the reason work is not done, announces no stop, claims no absent words or tasks without searching every transcript and every task register, and admits no mistake without recording it as a defect.
- Under blockers and next steps this answer gives the user nothing to do and hands back no decision, names no build gate, judge outage or own work as a blocker, and says neither that nothing is left nor that the work belongs to one session.
- This answer is in the language of the user's latest message, records as many separate defects as the user asked for, leaves no work undone because of a cost nobody checked, carries no plan and no inability under what was done, explains no empty blockers or next steps, and announces no next step of my own.
An answer that lacks one is refused with BLOCKED: block-stop-on-own-work: the answer this turn ends with does not carry its turn-end attestation: and one missing: "<claim>" line per missing claim. A false claim is the agent's defect, on record in the transcript.
#What is read from the transcript
The report's three parts are found by their headings' form and position, not their words: a heading is a markdown heading line (##) or a line that is only bold text, and among the headings of the last heading's form the last heads next steps, the one before it blockers, and the one before that what was done. A deeper subheading stays inside its part. The gate refuses, before reading the attestation:
- an ending written after a stop guard refused the previous one when nothing since then changed source — no
edit,writeorgit commit;block-stop-on-own-work: BLOCKED: a stop guard refused the previous ending and nothing since then changed source …. A session Oko records as a supervisor answers a refusal with its executors' progress instead. This refusal, andblock-idle-answer's refusal of an answer with no tool call after a stop refusal, stand down when Oko's defect register answers that every open defect already carries a recorded repair; a register that cannot be read keeps both. - a part's heading written twice, whatever it says:
block-stop-on-own-work: BLOCKED: this answer carries the section "…" twice. - a turn that ran
oko defects recordand changed no source:block-stop-on-own-work: BLOCKED: this turn recorded a defect and changed no source for it …. - an ending that restates one of the agent's last answers to earlier operator messages, or a report a stop guard already refused said again, by the share of three-word runs they share, from a turn that changed no source:
block-stop-on-own-work: BLOCKED: this ending restates an answer already given (…% of its word runs), and this turn changed no source …. - a report that begs but does not hand the operator exactly one command: under next steps the begging carries one command written as a code span, and on macOS that command is what
pbpastereturns, because the agent copied it withprintf '%s' '<command>' | pbcopybefore answering;block-stop-on-own-work: BLOCKED: this report begs with 2 commands …,… begs with `…`, but the clipboard holds something else …. - a begged command that cannot succeed. Each step run by a program
stado product installplaced in~/.stado/binis asked for its own--helpusage line, and every option that line requires must be in the step; a program whose help offers--check-argumentsis asked to parse the whole step with it. A chain that installs a product's release after astado release submitof that product is refused: the submit only queues the build. A step that builds a product from its checkout is also checked withstado quality check --root <checkout>over the committed tree;block-stop-on-own-work: BLOCKED: this report begs with a command that cannot succeed: `…` ….
A transcript that cannot be read refuses with block-stop-on-own-work: TAMA_HOOK_INFRASTRUCTURE: this ending cannot be judged: <cause>. An empty ending is not judged.
#Tests
tests/task-attestation/turn.rs runs the built tama hook block-stop-on-own-work, with every other turn-end hook the declaration names, in an isolated home with no model declared and no Brama: an answer without the claims is refused naming each one, and the same answer carrying them, wrapped over lines, passes. cargo test --manifest-path rust/Cargo.toml -p tama-cli --test stop_gate_report_headings requires the repeated-heading refusal for ## Blokady, ## Przeszkody and **Obstacles** written twice, and none for three distinct headings with a subheading.