Layout-only C ABI contract for the EdgeFirst detection vocabulary.
Decoding model outputs into user-consumable structures — detection boxes,
segmentation masks, tile placements — is what the decoder library is, so
these types belong to it. They lived in edgefirst-tensor because of the
r2 "plain-values-only boundary rule", whose premise (sibling libraries
never link each other) spec Revision 3 overturned. A plain value that
crosses needs a shared DECLARATION, not a shared LINK.
Emitted into edgefirst/decoder.h by cbindgen's [parse] include,
exactly as edgefirst-tensor-abi's types are emitted into tensor.h.