Why: Codex stop-time review #N (2026-05-10) caught the real bug — my b9b4126b / 810c2f7a chain detected heuristic image-area frames at collectImageSearchTargets and enqueued them at enqueueImageForSearch, but the queue processor's still-needs-fill re-check (line 350-358 of processQueue) called isUnfilledImagePlaceholderFrame which strictly requires role='image-placeholder'. Heuristic frames have no role, so the re-check returned false and the queue silently dropped them before issuing the fetch — net effect was zero photos for the food-app card scenario the heuristic was supposed to fix. What: extract a new pure-function predicate \`isFramePlaceholderStillUnfilled(node)\` that accepts a node iff it is EITHER a canonical unfilled placeholder (role-based) OR a heuristic match (name-based). Queue processor calls this single helper instead of the strict canonical-only check. The helper is also exported and test-covered separately so a future regression on this code path fails loudly. 6 new it() cases pin: positive on canonical + heuristic, negative on already-filled (canonical AND heuristic), null/undefined, and unrelated frame names. 31 → 37 tests in image-search-pipeline.test.ts; 1109 / 1109 AI service tests pass overall (was 1103; +6). |
||
|---|---|---|
| .. | ||
| cli | ||
| desktop | ||
| web | ||