Gap found by the #94 capstone ("GAP #2" in lead-finder.test.ts).
Problem. resolveInputValue exposes the current forEach item ONLY as the whole object via {$param:"item"}. There is no way to read a field of it — {$param:"item.lat"} falls through to scope.params["item.lat"] (undefined). So a forEach body can't plug item.lat/item.lng into a Places request body, nor item.websiteUri into an http_reachable url.
Evidence. resolveInputValue({$param:"item.lat"}, {…, item:{lat:-33.9}}) → undefined (asserted). {$param:"item"} → the whole {lat:…} works.
Consequence. Blocks BOTH per-cell grid search (needs item.lat/item.lng in the request body) and per-record reachability (needs item.websiteUri).
Proposed fix. In resolveInputValue, when obj.$param starts with item. and scope.item !== undefined, read the dotted remainder off scope.item (reuse the existing readPath). i.e. $param:"item" → whole item; $param:"item.lat" → readPath(scope.item,"lat"). One-line-ish, backward compatible.
Part of #94.
Gap found by the #94 capstone ("GAP #2" in
lead-finder.test.ts).Problem.
resolveInputValueexposes the currentforEachitem ONLY as the whole object via{$param:"item"}. There is no way to read a field of it —{$param:"item.lat"}falls through toscope.params["item.lat"](undefined). So aforEachbody can't plugitem.lat/item.lnginto a Places request body, noritem.websiteUriinto anhttp_reachableurl.Evidence.
resolveInputValue({$param:"item.lat"}, {…, item:{lat:-33.9}})→undefined(asserted).{$param:"item"}→ the whole{lat:…}works.Consequence. Blocks BOTH per-cell grid search (needs
item.lat/item.lngin the request body) and per-record reachability (needsitem.websiteUri).Proposed fix. In
resolveInputValue, whenobj.$paramstarts withitem.andscope.item !== undefined, read the dotted remainder offscope.item(reuse the existingreadPath). i.e.$param:"item"→ whole item;$param:"item.lat"→readPath(scope.item,"lat"). One-line-ish, backward compatible.Part of #94.