Cross-references what spec/ declares against what lib/ defines, and renders the
result as API_SURFACE.md through Surfex.Golden.
One row per public function on either side. specified means both agree; unspecified
is a public function no document declares; unimplemented is a declared function no
source defines. The gate (mix vis.surface --check) is HARD on both: drift of the
rendered document, and any row that is not specified (spec/12 §2). The second is not
implied by the first — the golden is regenerated by the very change that introduces an
undeclared function, so the file agrees with itself while the surface has drifted from
the specification.
Summary
Functions
The golden as data: what render/1 hands to Surfex.Golden.render/1.
Renders run/1's result to the golden's bytes.
Scans root and joins the two sides.
Types
@type result() :: %{ rows: [Surfex.Golden.row()], specified: non_neg_integer(), unspecified: [String.t()], unimplemented: [String.t()] }
Functions
@spec golden_spec(result()) :: Surfex.Golden.spec()
The golden as data: what render/1 hands to Surfex.Golden.render/1.
Renders run/1's result to the golden's bytes.
Scans root and joins the two sides.