Expression evaluation swallows every failure and yields undefined. For a positive condition that fails closed. For a negated one it fails open, and a negated condition is how most authorization guards in a template are written.
import { safeEvaluateCondition } from '@stacksjs/stx/safe-evaluator'
safeEvaluateCondition('blocked', {}) // false <- correct
safeEvaluateCondition('!blocked', {}) // true <- renders the guarded block
safeEvaluateCondition('!canEdit', {}) // true
safeEvaluateCondition('!isPaid && !isTrial', {}) // trueSo