Location: src/lin.cpp (the message-to-frame conversion function, around lines 121-125)
Finding: The function that turns a generic message back into a LIN frame treats any meta value other than the one specific named 'enhanced' literal as Classic — including empty strings, typos, or (per the companion fixture issue) a bare numeral. Round-tripping a frame through serialize-then-deserialize is therefore not guaranteed lossless: an already-shipped test fixture with a malformed checksum-type value deserializes silently to Classic even though it should represent Enhanced. The spec's requirement that mandatory-field round-tripping be lossless is violated, and there is no error path for an unrecognized value — malformed input is accepted silently rather than rejected.
Recommendation: Explicitly match both the 'classic' and 'enhanced' named literals, and treat any other non-empty value as an error (e.g. return/throw the existing invalid-frame error type) rather than defaulting to Classic.
Filed from the 2026-07-29 ecosystem audit register; independently re-verified against current HEAD before filing.
Location:
src/lin.cpp(the message-to-frame conversion function, around lines 121-125)Finding: The function that turns a generic message back into a LIN frame treats any meta value other than the one specific named 'enhanced' literal as Classic — including empty strings, typos, or (per the companion fixture issue) a bare numeral. Round-tripping a frame through serialize-then-deserialize is therefore not guaranteed lossless: an already-shipped test fixture with a malformed checksum-type value deserializes silently to Classic even though it should represent Enhanced. The spec's requirement that mandatory-field round-tripping be lossless is violated, and there is no error path for an unrecognized value — malformed input is accepted silently rather than rejected.
Recommendation: Explicitly match both the 'classic' and 'enhanced' named literals, and treat any other non-empty value as an error (e.g. return/throw the existing invalid-frame error type) rather than defaulting to Classic.
Filed from the 2026-07-29 ecosystem audit register; independently re-verified against current HEAD before filing.