Cross-references every function spec/ declares against every public function lib/
defines, and renders the result to API_SURFACE.md.
mix vis.surface # print the two backlogs
mix vis.surface --write # regenerate API_SURFACE.md
mix vis.surface --check # fail if the golden has drifted from spec/ and lib/--check is HARD and fails on two things (spec/12 ยง2): the golden differing from what
spec/ and lib/ render to โ it is generated, so a difference means it was hand-edited,
or the code or the spec changed without a regenerate โ and any row whose status is not
specified, which is how a public function nobody declared is caught. The byte
comparison alone cannot catch that one: the golden is regenerated by the very change that
introduces the undeclared function, so the file on disk agrees with itself.
Bare mix vis.surface reports the same two backlogs without failing, and is the form to
run while the work is in hand.