Classifies the current change set and reports the next spec-led action.
Classification and reconciliation labels are kept byte-for-byte compatible with specled_ex because agent workflows consume them as an API.
@spec build( Path.t(), keyword() ) :: {:ok, map()} | {:env, String.t()}