Root identifiers an expression references that the runtime envelope does not provide.
Roots only — a property this engine cannot see (payload.whatever) is a question about data that
does not exist yet and is answered at run time. A root it cannot see is answerable now, and
answering it now is the difference between a refusal at the door and a branch that holds forever.
Returns nothing when the expression binds names of its own. An arrow function introduces a
parameter that is legitimately free at the point this scans (items.some(item => item.price > 1)
— item is bound by the arrow, not by the envelope), and refusing it would reject a documented,
working shape. Arrows are the only binder the grammar admits: the evaluator's policy screen
already rejects ; and {, so there are no statements and no declarations. When one is present
this stays silent rather than guessing, which keeps the check sound in the direction that matters
— it may miss a typo, it will never invent one.
Root identifiers an expression references that the runtime envelope does not provide.
Roots only — a property this engine cannot see (
payload.whatever) is a question about data that does not exist yet and is answered at run time. A root it cannot see is answerable now, and answering it now is the difference between a refusal at the door and a branch that holds forever.Returns nothing when the expression binds names of its own. An arrow function introduces a parameter that is legitimately free at the point this scans (
items.some(item => item.price > 1)—itemis bound by the arrow, not by the envelope), and refusing it would reject a documented, working shape. Arrows are the only binder the grammar admits: the evaluator's policy screen already rejects;and{, so there are no statements and no declarations. When one is present this stays silent rather than guessing, which keeps the check sound in the direction that matters — it may miss a typo, it will never invent one.