Proof grammar island
One block, five classifications. The first four shapes were each silently dropped or silently misread before the grammar was written down (C4).
enforced: verify-proofs.py runs the two proofs, and--strictgoes red on the PENDING.advisory: nothing else here is real.
scripts/probe.sh dirty # exit 1
$ scripts/probe.sh clean
| PASS nothing dirty
$ echo $? # → 0
python3 -c "import sys; sys.exit(0)"
scripts/probe.sh <mode>
true # exit 0
The five, in order: a bare island-relative script with an inline code; the same script
whose code sits on a report line two lines below its output; a candidate carrying no code
at all (PENDING); a usage template with a <placeholder> (TEMPLATE); an off-allowlist
leading token that still states a code (SKIPPED).
Two proofs run here, so the PENDING is not the only thing --strict has to weigh.
pending-only/ is the island where it is, and where the two answers
compete.
unrecognized-command/ captures the report-binding boundary:
an off-allowlist command between a candidate and an exit report is SKIPPED; the earlier
candidate stays PENDING and cannot borrow that later status.
Two narrower grammar edges sit beside it. bash-builtin/ proves an
off-allowlist Bash builtin is the same command boundary, and
empty-assignment/ proves an empty ordinary binding clears stale
block context rather than disappearing.
host-independent-command/ removes the last lookup guess:
a syntactically command-shaped line owns its position whether or not that name exists on the
review host. Ambiguous shell-looking output stops report search too; | marks explicit output,
and inline exit annotations are the other unambiguous form.
malformed-command/ extends that boundary to rows a shell lexer
rejects, while export-boundary/ proves a replayable export still owns
the status it produces. report-compound/ requires a pure report to
end where the report grammar ends. comment-lexing/ watches hashes
protected by ANSI-C quoting or escaped whitespace, and
continuation/ watches Bash's zero-byte backslash-newline removal. The
parser self-check below keeps encoded forbidden names entirely out of a subprocess while proving
hex, octal, and Unicode spellings are refused in direct commands and all four substitution forms.
The host-independence and lexer claims are executable rather than inferred from this prose:
python3 check-host-independent.py # exit 0
python3 check-parser-regressions.py # exit 0