Every variable the engine binds for the RENDERED condition scope (every
condition site: transition whens, activity filters, action
whens/filters, effect bindings, spawn reads, where-op wheres,
editability predicates, author predicates) — the deploy-time shadow check
(RESERVED_CONDITION_VARS) and the docs on Condition derive
from this list; extend it here when the engine grows a binding, never in
a comment elsewhere.
Three other GROQ contexts read a definition and do NOT share this
inventory: cascade gates (transition/activity/cascade-action gates, which
must resolve identically regardless of caller — only the 'always'-bound
subset carries values, FILTER_SCOPE_VARS); the start contexts
(start.filter is browse-time-pure over a candidate document,
START_FILTER_VARS; a start groq requirement binds $fields
instead, START_REQUIREMENT_VARS); and lake guard predicates, which
are not conditions at all — delta-mode GROQ over a mutation, binding
GUARD_PREDICATE_VARS instead.
Every variable the engine binds for the RENDERED condition scope (every condition site: transition
whens, activity filters, actionwhens/filters, effect bindings,spawnreads, where-opwheres, editability predicates, author predicates) — the deploy-time shadow check (RESERVED_CONDITION_VARS) and the docs on Condition derive from this list; extend it here when the engine grows a binding, never in a comment elsewhere.Three other GROQ contexts read a definition and do NOT share this inventory: cascade gates (transition/activity/cascade-action gates, which must resolve identically regardless of caller — only the
'always'-bound subset carries values, FILTER_SCOPE_VARS); the start contexts (start.filteris browse-time-pure over a candidate document, START_FILTER_VARS; a startgroqrequirement binds$fieldsinstead, START_REQUIREMENT_VARS); and lake guard predicates, which are not conditions at all — delta-mode GROQ over a mutation, binding GUARD_PREDICATE_VARS instead.