Pay down the terminal and test-suite debts from the review master
Ctrl+C now cancels a running turn and quits only when idle, matching how a REPL reads it. Slash commands match on trimmed input, and Tab completes only a single-line buffer starting with a slash. An idle viewport gives surplus rows back at once instead of holding them until the next reply. The sandbox module joins coverage builds, so its tests run under the enforced hook. The pinned-viewport test double and the real terminal now build their moves from one viewport::Move, so the tests validate the shipping math instead of a copy. On the test side: sha256_hex gets a FIPS known-answer vector, the fidelity fixtures freeze literal bodies instead of computing them with the function under test, disjunctive assertions pin their field, the corpus counts are exact, the symlink-escape test asserts against its own temp root rather than /tmp, and the duplicated fake chat server and tarball builders move into cfg(test) modules owned by chat and srd. cli.rs still holds its copies of the srd helpers; adopting the shared ones is deferred because its tiny_tar_gz builds different contents. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>