RFC 7208: Sender Policy Framework
source: IETF Datatracker
Why it is worth your attention: most arguments about SPF can be settled by one section of the standard. Most often section 4.6.4, which caps DNS lookups at ten – the reason long include chains quietly stop working.
Where to look: section 5 describes the individual mechanisms (a, mx, ip4, include, all), section 7 covers macros, and section 8 gives the exact meaning of pass, fail, softfail, neutral, permerror and temperror. The difference between permerror and fail is the one that loses mail without a bounce.
Limits: the standard says what an evaluator should do, not what a given implementation does. Postfix, rspamd and the large providers differ in edge cases, mostly around ptr handling and redirects.