| 1 | --- |
| 2 | description: Conditional isolated multimodal review of bounded web-image thumbnail pages. |
| 3 | --- |
| 4 | |
| 5 | # Web Image Review Stage |
| 6 | |
| 7 | > Supporting Generate stage for choosing from thumbnail pages already prepared |
| 8 | > by the web-image acquisition path. It reviews pixels only: it never searches, |
| 9 | > downloads, changes the locked image intent, or writes project artifacts. |
| 10 | |
| 11 | ## When to Run |
| 12 | |
| 13 | | Review capability | Action | |
| 14 | |---|---| |
| 15 | | An isolated worker can inspect the declared local images | Dispatch exactly one reviewer for all pending sheets in the current acquisition batch | |
| 16 | | Only the active image owner can inspect images | Read this stage and review the same batch locally | |
| 17 | | No available context can inspect images | Skip this stage and use the strict metadata-only acquisition path | |
| 18 | |
| 19 | Run after `--save-candidates` has produced `Needs-Selection` rows and before any |
| 20 | `--promote` command. When the host supports follow-up messages, reuse the same |
| 21 | reviewer for later candidate pages in that acquisition run; never dispatch one |
| 22 | reviewer per resource row. |
| 23 | |
| 24 | --- |
| 25 | |
| 26 | ## Execution Context |
| 27 | |
| 28 | **Default — isolate thumbnail pixels when available**: The active image owner |
| 29 | retains query, search, pagination, promotion, status, and provenance ownership. |
| 30 | Supply the reviewer only this stage's absolute path and these per-row records: |
| 31 | |
| 32 | | Input | Required value | |
| 33 | |---|---| |
| 34 | | Row identity | Resource filename or stable batch-row identifier | |
| 35 | | Acceptance intent | Exact locked `Reference` and `Crop Policy` | |
| 36 | | Candidate state | Current page, `has_more_candidates`, and `next_candidate_page` when present | |
| 37 | | Local evidence | Absolute `review_sheet.jpg` and `candidates.json` paths | |
| 38 | |
| 39 | The isolated reviewer reads this file completely, then inspects only the |
| 40 | declared sidecars and review images. It does not read `image-base.md`, |
| 41 | `image-searcher.md`, the Design Spec, the lock, or source files. It runs no |
| 42 | network request, command, or project write. If any declared path is unreadable |
| 43 | or image inspection is unavailable, return `blocked` with the exact reason. |
| 44 | |
| 45 | --- |
| 46 | |
| 47 | ## Review Contract |
| 48 | |
| 49 | Apply the gates in order for every row: |
| 50 | |
| 51 | | Order | Gate | |
| 52 | |---:|---| |
| 53 | | 1 | Reject a candidate unless its `license_tier` is `no-attribution` or `attribution-required`; also reject unreadable previews or known dimensions that cannot serve the planned placement | |
| 54 | | 2 | Confirm the exact subject or identity; `visual-verification-required` passes only when the pixels establish the missing identity evidence | |
| 55 | | 3 | Check orientation, focal placement, crop safety, and usable quiet region against the locked intent | |
| 56 | | 4 | Check the requested view, action, and mood | |
| 57 | | 5 | Among passing candidates, prefer lower expected crop loss and higher usable resolution, then no-attribution | |
| 58 | |
| 59 | **Mandatory — bounded detail inspection**: Triage with `review_sheet.jpg`. |
| 60 | Open an individual `review/candidate_NN.jpg` only when exact identity or a fine |
| 61 | detail cannot be resolved from the sheet; never bulk-open every candidate. |
| 62 | |
| 63 | **Hard rule — no least-bad promotion**: Select only a candidate that passes all |
| 64 | applicable gates. When none passes, return `no-pass`; do not weaken the locked |
| 65 | Reference or Crop Policy. |
| 66 | |
| 67 | --- |
| 68 | |
| 69 | ## Receipt and Hand-off |
| 70 | |
| 71 | Return one compact table and no embedded images: |
| 72 | |
| 73 | ```markdown |
| 74 | | row | decision | candidate | reason | next | |
| 75 | |---|---|---|---|---| |
| 76 | | <id> | selected / no-pass / blocked | candidate_NN.jpg / — | <short evidence> | promote / next-page / pool-exhausted / repair-input | |
| 77 | ``` |
| 78 | |
| 79 | For `selected`, name exactly one candidate from that row's current page. For |
| 80 | `no-pass`, use `next-page` when `has_more_candidates` is true; otherwise use |
| 81 | `pool-exhausted`. Keep the entire chat receipt under 200 words. |
| 82 | |
| 83 | The active image owner validates every selected filename against |
| 84 | `candidates.json`, runs `--promote`, and verifies the downloaded original's |
| 85 | readable dimensions and provenance. A no-pass row advances to the next ranked |
| 86 | page before query replacement. An invalid receipt returns to the same reviewer |
| 87 | for correction; it never authorizes an arbitrary promotion. |
| 88 |