Decode diagnostics
When @boarteam/fix finds a problem it returns it as data — a stable code, a severity, and where in the message it applies. It never throws. These are the codes you are most likely to see, and what usually causes them.
Framing
The message envelope — BeginString, BodyLength, CheckSum — did not line up.
| Code | What it means | Usual cause |
|---|---|---|
| parse/checksum-mismatch | The CheckSum field does not match the bytes. | Usually a message that was edited, or one copied with pipes after being framed with SOH — the two forms have different checksums. |
| parse/body-length-mismatch | BodyLength disagrees with the framed body. | Truncated capture, or a hand-written message where the length was not recomputed. |
| parse/begin-string-mismatch | BeginString names a different version than the dictionary in use. | Decoding a FIX 4.2 message against the FIX 4.4 dictionary, or vice versa. |
| parse/missing-checksum | No CheckSum field was found. | The message was cut short, or the separator was not what the decoder expected. |
| parse/missing-body-length | No BodyLength field was found. | Same as above — most often a wrong separator. |
| parse/missing-msgtype | No MsgType (35) field was found. | Not a FIX message, or only a fragment of one. |
Datatypes
A value did not lex as the type its field declares. The message still decodes; the raw string is kept.
| Code | What it means | Usual cause |
|---|---|---|
| parse/invalid-float | A float-family field held something that is not a number. | An empty value, a placeholder like N/A, or a locale-formatted number with a comma. |
| parse/invalid-int | An int-family field held something that is not a whole number. | Same causes as above. |
| validate/invalid-value | A value did not match its datatype's format. | Most often a timestamp in ISO format instead of the FIX YYYYMMDD-HH:MM:SS[.sss] form. |
Dictionary rules
The message parsed, but it does not obey the dictionary for its MsgType.
| Code | What it means | Usual cause |
|---|---|---|
| validate/value-not-in-enum | An enumerated field held a value the dictionary does not define. | A venue extension, or a value that exists in a different FIX version. |
| validate/required-field-missing | A field marked required for this message is absent. | A partially-built message, or one built against a different version. |
| validate/required-group-missing | A required repeating group has no entries. | Group members supplied at the wrong nesting level are silently dropped when encoding — this is how that shows up. |
| validate/conditional-required | A field required by a condition is absent. | Setting PossDupFlag=Y without OrigSendingTime is the classic case. |
| validate/unknown-msgtype | The MsgType is not in the dictionary. | A venue-specific message, or the wrong dialect. |
Severity
Issues carry one of three severities. error means the message is wrong in a way that matters; warning means it is suspect but usable; info is a note. A message can be framed: true and still carry errors — framing only means the envelope was found, not that it checked out, so “framed” is never the same as “valid”.