v0.8.1 — The deliverable assertion owns THIS run's comment
A failed post can no longer hide behind an old comment
The first live replay under 0.8.0 exposed a false green. The review agent drafted a correct CI-free review, then posted it with gh pr comment ... --body-file <file> && rm -f <file>; the && rm made the whole compound deniable, so nothing executed. The agent's self-check found the PR's stale review comment from an earlier run, concluded its post had landed, and reported success — and the deliverable assertion, which only checked that ANY AUTOMERGE-DECISION-V1 comment exists, agreed. Green job, nothing delivered.
The assertion is now run-scoped: a timestamp is captured before the agent starts (minus a 60-second skew margin), and only comments created at or after it count. A replay or a synchronize re-review of an already-reviewed PR can no longer be satisfied by history; a review that fails to deliver is a red job with a needs-human-review label.
The prompt names the body file
The trace showed two stumbles on the way to the fatal compound: the agent first tried writing its draft to /tmp (blocked by the sandbox's working-directory rule) and then wanted to clean up its temp file (the && rm). The prompt now says exactly where the body goes — write .dep-steward-review.md with the Write tool, post with gh pr comment --body-file on that path — and states that the runner is discarded after the run, so the file needs no cleanup. The sanctioned path is the obvious one; no prohibition added.
The diagnose summary counts denials from the data
The result summary printed permission_denials_count: null while ten real denials sat in the SDK's permission_denials array. The count is now derived from the array itself.