One item a scanner found in the code: the unit a spec citation resolves to, and the
source of a code record (Surfex.Scan.code/1).
key/1 is the identity. It must stay stable across edits that rename nothing, or a
golden reports a deletion and an addition where a reader should see one row whose
version changed. That is why the version lives in :hash (a
Surfex.SourceScan.definition_hash/1-style content hash) and never in the key.
A scanner decides what the kinds are. Surfex never interprets :kind beyond grouping
and the rules a project writes in its Surfex.Profile.