M-x flan-dev builds, launches and connects in one command, so a terminal is no longer part of the loop. It waits for a connection rather than for the socket file: the daemon unlinks a stale socket before binding, so waiting on the file either succeeds against nothing or races the unlink. A daemon that dies before binding - a program that does not compile, which is the failure people will actually hit - pops its buffer and refuses by name, because the compiler's reason lives only there. flan-dev-restart-program is elisp rather than a daemon op, and that is a design answer rather than a shortcut: a session's struct layouts describe a process only if that session compiled it, so restart the program, keep the session is not a coherent thing to offer. It waits the old daemon out before starting the new one, or the old one's exit unlinks its successor's socket. Quit says the program may have outlived the daemon when it has to kill rather than close, instead of reporting success - a killed daemon never runs the cleanup that signals its child. The restart test proves itself by what it discards: a name installed into the old program is absent from the new one. Both quit and restart were verified able to fail by mutating the client. Two places now show that Tast.global and Tast.extern carry no Loc - M-. refuses, and the doc buffer says the daemon reports no location - which is the same gap recorded twice rather than papered over.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%