Measured against the real model: a bash project whose check is ./check.sh had
its bug fixed, ran the check, watched it pass — and the run exited 1. The
classifier cannot tell a project's runner from a deploy, so it read no check,
and the turn was failed for the host's own blind spot. Anyone driving `-p` from
CI got a failure for work that was done.
Nor did the failure buy anything. The gate reads the writer from this turn, so
the next one — having written nothing — passes with no evidence at all. It
could not collect later what it refused to accept now; it only cost a turn and
a false red.
So the gap now says which kind it is. Nothing ran at all is still the turn's
own miss and still fails. A command that ran and could not be read is an
advisory: it names what went unread and how to declare it, and lets the turn
end. Delivery is untouched, and its stricter static answer still stands.
Print mode dropped every warning, having nowhere but stdout to put one, so the
advisory would have been invisible where it matters most. Warnings now go to
stderr, where the run already reports itself — stdout still carries the answer
alone, and no pipeline changes. That also restores planner fallbacks and folded
user turns to view.
Verified end to end against deepseek-v4-flash: unreadable check → exit 0 with
the warning on stderr and the fix applied; wrote a file and ran nothing → still
exit 1.