Not principles I started with. Each one exists because of a specific dated incident, and the fix that came out of it.
An answer without a source is a guess wearing a suit.
A client's name once arrived empty on the other end, even though it was typed in correctly. One tool in the chain silently dropped it when triggered a certain way, so the fix moved that step earlier, before the data could go missing, instead of adding a check to catch it after.
RULE 0: never break working functionality with a change.
Written the day a fix re-broke a problem already solved once. A regression on already-working behavior costs more than the original bug, because it re-opens trust already spent. Now any change to shared code gets every consumer traced first, and the original path replayed after.
Make illegal states unrepresentable, don't clean them up downstream.
Written after a voice agent got confused about who it was talking to, because the code underneath had quietly started guessing at meaning. Guessing at meaning is the AI's job, not the code's. The fix wasn't a smarter guess, it was a stricter rulebook: the AI states plainly what it heard, and the code either accepts it or rejects it, never argues.