sclass GazelleContextCache { transient Lock lock = lock(); transient GazelleEvalContext cachedCtx; GazelleEvalContext get() { lock lock; GazelleEvalContext ctx = cachedCtx; if (ctx == null) { GazelleEvalContext _cachedCtx = dm_gazelle_stdEvalContext(dm_gazelle_allRulesWithComment("discord")); cachedCtx = _cachedCtx; ctx = gazelle_cloneCtx(_cachedCtx); } ret ctx; } AutoCloseable listenToMessages() { ret vmBus_onMessages(r { cachedCtx = null }, 'gazelleRulesChanged, 'gazelleFeedbackChanged); } }