Most prompt failures are structural — missing role, missing format spec, no fallback. Fix the structure first. The content follows.
Every working system prompt has the same four parts. Missing any one of them forces the model to fill the gap with its defaults, which are inconsistent across calls and across models.
There's a natural sequence for building a system prompt that works in production. Each step catches a different class of problem.
These account for the majority of system prompt failures in production. The linter catches most of them automatically.
[COMPANY_NAME] or [YOUR POLICY HERE] left in the live prompt. The model treats these literally or ignores them — both cause incorrect behavior.