ReadonlyprojectDeclared as a property holding a function, not as a method: what's
actually attached is a closure (Object.assign(invoke, {project})) that
never reads this, so a consumer is free to destructure or pass it
around. A method signature would claim otherwise and make every such
use look like an unbound-method bug.
The function
defineEvidenceProjection()returns. Callable directly for the common case (projection(evidence)->T);.project()returns the same value alongside automatic, per-field provenance.