98c1f8c3e1
The contract required the bare '!cancelled() && !failure()' idiom on build/smoke/soak — the exact form the v0.10.7 incident proved fail-open (failure() does not cover a CANCELLED needed job). It now requires each gate's explicit accepted results, the sanctioned skip_tests clause on build, and the preflight version guard wired before lint. Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>