Every check of `abort' so far was of it being refused while the program runs. The accepted path -- the one that ends a program -- was code that had never run and answered `ok'. So the break block breaks its program once more, by installing a `step' that errors into the loop that calls it, and takes the exit: the daemon owns the program's lifetime, so no `close' is sent and the daemon coming down on its own is the assertion. And `restart' refuses a name with a control character in it. The agent's contract is one line per request; a newline in a name is a second request smuggled into the first. `completing-read' with require-match cannot produce one, but the guarantee belongs to the end holding the socket, and an editor is not the only thing that can speak to it.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%