Designing a parser contract for AI output (not just a prompt) Anguardia's import pipeline for AI-generated prospect research uses a deterministic parser that never fails, instead returning warnings for malformed or unrecognized data. The parser accepts legacy markers and drops unknown fields or invalid dates with visible warnings, treating blank as better than plausible. This approach ensures that AI output is handled reliably without dead ends. Most posts about getting structured data out of an LLM stop at the prompt: ask for JSON, maybe hand it a schema, done. That's necessary but not sufficient — the harder problem shows up on the other end, in the code that has to trust what came back. I hit this building the import pipeline for a CRM Anguardia https://anguardia.com that reads AI-generated prospect research, and the parser ended up teaching me more than the prompt did. The prompt asks for a fixed markdown shape — headings, a table, checkbox tasks: php < -- anguardia-dossier v1 -- Dossier: