Assert a runHook result's text REACHED THE MODEL — the assertion a nudge
test needs, because "the hook printed it" is not "the model received it".
Reads HookRunResult.delivery: passes only on delivered. Each other
verdict fails with its own cause — the five are different facts and a red
test must name the right one:
undelivered — text went to a stream this event does not deliver (the
measured case: stderr at exit 0 on PostToolUse). Names the stream, the
bytes, and the cure.
silent — nothing addressed to the model, or the hook never ran (its
condition did not match).
unknown — the event has no row in the harness's capability table, so
delivery cannot be judged. FAILS rather than passes (no-silent-skips):
pass capabilities to runHook, or add the row.
Assert a
runHookresult's text REACHED THE MODEL — the assertion a nudge test needs, because "the hook printed it" is not "the model received it".Reads HookRunResult.delivery: passes only on
delivered. Each other verdict fails with its own cause — the five are different facts and a red test must name the right one:undelivered— text went to a stream this event does not deliver (the measured case: stderr at exit 0 onPostToolUse). Names the stream, the bytes, and the cure.silent— nothing addressed to the model, or the hook never ran (its condition did not match).blocked— a veto, which is not a nudge; use assertHookBlocked.unknown— the event has no row in the harness's capability table, so delivery cannot be judged. FAILS rather than passes (no-silent-skips): passcapabilitiestorunHook, or add the row.