Files
Zecheng Zhang 4d2bed916d test(integ): cross-check explain against the run, and type the answer word
Every case on a target carrying a document now reads the line through
ws.explain before running it, and asserts three things: the dry run
records no question, a refusal it predicts is the refusal that arrives,
and a refusal that arrives was predicted. The last one is found by
looking for one of the document's own rule reasons in what the run
printed, and is the direction a prediction cannot check on its own; it
is what catches a line explain wrongly calls allowed.

Seven cases carry explain_blind with the reason the command plane cannot
reach their verdict (a runtime-expanded glob, a refusal from the op door,
a function the same line defines), named rather than silently skipped.

The battery's three answer words are also a real type in both harnesses
now. They were compared as open strings, so everything that was not
allow_once fell through to a session-wide allow and a misspelled word
passed the case while testing the most permissive answer there is.
2026-08-21 14:52:35 -07:00
..