As stated, the SOLID principles applies where object-orientation is used, and the problems you listed can be easily expanded to well-engineered object-oriented codebases, not only to the SOLID principles. 

SOLID principles, however, can be used also in other programming paradigms, as procedural:
Single Responsibility Principle (SRP): A procedure should have only one reason to change. This means that a procedure should be focused on performing a specific task and not try to do multiple things.

Open/Closed Principle (OCP): Procedures should be open for extension but closed for modification. This means that new functionality should be added by creating new procedures rather than modifying existing ones.

Liskov Substitution Principle (LSP): Procedures that are interchangeable with each other should have the same inputs and outputs. This means that procedures with similar signatures should be interchangeable without causing any issues.

Interface Segregation Principle (ISP): Procedures should not be forced to implement interfaces they do not use. This means that procedures should only implement the necessary inputs and outputs and not include unnecessary ones.

Dependency Inversion Principle (DIP): High-level procedures should not depend on low-level procedures. Both should depend on abstractions. This means that procedures should depend on abstractions rather than concrete implementations.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence