The watch accumulator clears a slot lazily, on its next sample, and the reader never compares epochs. A previous lane read that as a defect and left watch_render_num's n=0 arm behind as dead code against the day the reader became epoch-aware. It should not. A stopped program takes no samples, so an epoch-aware reader would report every slot as empty for as long as the program sat in a break loop — and reading the numbers from the moment you stopped is the whole point of stopping. The lazy clear is the right answer there. What was wrong was narrower and lives in the editor: flan-watch--tick sent `:reset t` five times a second at a program that could not answer it. The read still goes out every tick; only the reset field drops, guarded on flan-dev--stopped, which flan-dev.el's background poll already keeps current. The n=0 arm is deleted rather than commented, since the only way to reach it is the epoch check just rejected and dead code is an invitation to add one. n is at least 1 whenever watch_render_num runs, so sum/n cannot divide by zero. test-flan-watch.el asserts both halves with no daemon: a running tick carries :reset, a stopped one does not, both still read the table and both leave a reply in flight. Verified by mutation. What it cannot reach is the daemon honouring the absent field; test_dev.ml drives a real program for that.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%