The contract gate as an exclusion, naming why it closed: a handler ran and
declined, or this build has no handler for the type at all.
The two want opposite reactions from whoever reads the log. A decline is
the gate working as designed — nothing to do. A missing handler means a
contract row this build cannot interpret, e.g. a vendoring or version
mismatch, which is worth a reader's attention. contractHandlers is
already available here, so the message can tell them apart instead of
collapsing both into one sentence that reads as the same case either way.
The contract gate as an exclusion, naming why it closed: a handler ran and declined, or this build has no handler for the type at all.
The two want opposite reactions from whoever reads the log. A decline is the gate working as designed — nothing to do. A missing handler means a contract row this build cannot interpret, e.g. a vendoring or version mismatch, which is worth a reader's attention.
contractHandlersis already available here, so the message can tell them apart instead of collapsing both into one sentence that reads as the same case either way.