Two CIDER-shaped buffers: C-c C-i navigates a value, C-c C-b shows the condition, the restarts and the stack. C-c C-M-b keeps the old one-key prompt. The inspector needs no protocol change at all. eval-expr already answers a rendered string, and Session.render writes exactly seven shapes, so that string is a grammar. Navigation is a stack of *expressions* rather than of handles: going into :pos sends (.pos b), into element 2 sends (at (.tags b) 2) - both ordinary Flan a person could type. CIDER keeps its stack on the server because a JVM value can be retained; nothing here can, since a Flan value has no header and the render thunk is dlclosed the moment it returns. The view is therefore never stale, where CIDER's shows the object as it was when you pushed. What it buys over C-x C-e is the depth-4 span-8 bound: a field past it comes back as ... and nothing recovers it from the echo area, and re-rooting renders it from depth 0. SBCL decided the order - condition, restarts, then stack - because invoke-debugger prints the condition and show-restarts and then stops; the backtrace is a command you type. The restarts are the decision and the stack is the explanation for it. And SBCL found a live bug. show-restarts omits the bracket on a name already used further in, which is not decoration: §4 takes the first frame offering a name, so a second frame offering retry is real, is on the list, and cannot be chosen. The old prompt showed retry twice and sent the string either way, and the inner frame took it silently. restarts.flan's own nested function has been that counterexample since the transfer landed. The buffer draws the shadowed row unbracketed and refuses RET on it by name, with a test asserting nothing was sent - which stops the lie without restoring the choice. Taking a restart by index is the fix and is recorded as such. Sections that cannot be filled are drawn saying why rather than omitted: a missing section cannot be told from an empty one, and only one of those is a fact about the program.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%