ConstFunction identity controls sharing (not function syntax) -- an inline
arrow function is a fresh identity every time the surrounding code runs,
which is indistinguishable, from the coordinator's perspective, from the
developer deliberately opting out of sharing. The same is true of an
identifier that merely looks like a stable reference syntactically but
resolves to a binding declared inside a function (a factory, a
component, a parameter) -- that binding is a fresh identity every time
the enclosing function runs, exactly like an inline literal would be.
This rule exists to make both easy-to-miss cases visible, not to ban
arrow functions -- execute: myStableArrowFunction, where
myStableArrowFunction is declared at module scope (or imported), is
exactly as sharable as a function declaration and never flagged.
What this rule deliberately does not attempt: proving stability through
a CallExpression (execute: makeGetUser()), a MemberExpression
(execute: someObject.getUser), a conditional, or cross-module aliasing.
Those are outside what static analysis can reliably decide; the runtime
coordinator's own behavior must stay correct independent of this rule.
Flags an
execute/subscribevalue inside acreateData()call that isn't a reference to a stable, module-level function, so the runtime coordinator's function-identity-based sharing/deduplication actually applies.