The first working tagging pipeline is a fragile victory. You wrote a prompt, it produced plausible JSON, you parsed it, and the labels looked right on the twenty transcripts you happened to test. Everything after that point is maintenance, and maintenance is where these pipelines actually fail.
The reason is structural. A prompt is not a specification. It is text that biases a probabilistic process, and the same text can produce different distributions of outputs on a different model, a different parameter setting, or even a different day. Prompt behavior depends on the prompt text, the model, parameters, tools, and retrieved context, so changing any of those inputs can alter results even when the prompt itself stays similar (Braintrust on prompt testing). Practitioners learn this the hard way: a small wording change that seems innocent can flip outputs, which is why prompts deserve the same discipline as application code (LaunchDarkly on prompt versioning).
Structured output formats help, but they solve only part of the problem. Constrained decoding, which masks out invalid tokens during generation so the output conforms to a schema, is now the dominant technique for JSON compliance, and it has been systematically benchmarked against real-world schemas (the JSONSchemaBench paper). What constrained decoding does not do is guarantee that the values inside the valid JSON are correct. A schema can force {"sentiment": "positive"} to parse while the label is still wrong.
There is a second failure mode that has nothing to do with the schema. A model that was asked to output "only JSON" may decide to be helpful and wrap the payload in a sentence. One reported incident involved an invoice pipeline that ran cleanly for three weeks until a supplier sent an unusual invoice, the model prefixed its output with "Here is the JSON data you requested:", and the parser crashed, leaving thousands of documents unprocessed before anyone noticed (Sharad Bharadwaj on structured outputs). Swap the model and you inherit a new set of conversational habits.
So the maintenance phase has three jobs that the first version never had to do: record what is running, decide whether a change is acceptable, and be able to go back. The rest of this article is those three jobs, in order.



