The line about a parser returning [] being a liar is a good way to put it. One addition to the repair-turn idea: it may help to cap repair attempts and then record the final rejected output as a typed failure, so downstream code can tell parse failure apart from a legitimately empty result. A semantic check on top of the schema also seems worthwhile, for example verifying that a reported line number actually falls within the file, since strict decoding guarantees shape but not truth. Did you see any difference in failure modes between providers that enforce the schema in decoding and those that only validate afterwards?