diff --git a/recognization/data/external-eval/README.md b/recognization/data/external-eval/README.md
new file mode 100644
index 0000000..a47cfc0
--- /dev/null
+++ b/recognization/data/external-eval/README.md
@@ -0,0 +1,55 @@
+# External evidence (2026-09-29)
+
+Independent-source media used to stress the identity pipeline. **None of this is
+Tier 2.** DECISION.md's Tier 2 is a second labelled store visit; these are
+`external_proxy` artifacts, and every manifest here says so.
+
+| Directory | What it holds |
+|---|---|
+| `other-mayo/` | 8 accepted images for `sku_l04`, `sku_l07`, `sku_l09` from 6 source domains, plus the scored result |
+| `l12-reconciliation/` | What `sku_l12` actually is, from the shelf tag and package pixels |
+| `kewpie/` | Kewpie 450 g research (the near-unknown case) |
+| `tier3-sources/` | Two reusable pan clips and 11 rejected candidates for a future Tier-3 replay |
+
+## Leak test
+
+Every accepted image was template-matched against `add/image6.jpg`. Highest
+score across all 8 is 0.675 (`sku_l07_1`), and the 0.95+ band that identifies a
+crop of the evaluation photo is empty. The images are genuinely external.
+
+## Result: 8 images, 0 false accepts
+
+Scored through the shipped `LocalLaneAdapter` + `DecisionPolicy` against
+`stock-lopia-clean` (`other-mayo/eval_result.json`):
+
+| Verdict | Count | Files |
+|---|---|---|
+| Correct accept | 4 | `sku_l07_1`, `sku_l07_2`, `sku_l09_1`, `sku_l09_2` |
+| Abstain | 4 | all `sku_l04_*` |
+| False accept | **0** | — |
+
+Two things this establishes that the image6 shelf cannot:
+
+- **`sku_l07` is answered with no enrolled image.** Both l07 images accept
+ through the text lane alone: `sku_l07_1` reads ラッキー フヨネーズ, and
+ `sku_l07_2` reads the rear label's 製造者:丸和油脂株式会社 with 内容量:200g.
+ The catalog row is 丸和油脂 ラッキーマヨネーズ 200g, so the manufacturer and
+ the size together name it. This is the text lane's coverage claim - that a
+ product with no reference image can still be named - holding on data that was
+ not used to build it.
+- **The l04 abstentions are correct behaviour, not a miss.** l04 has no
+ enrolled image either, and its reads are weak: `sku_l04_2` reads only
+ コと旨 タ 味 (all rows score 0.0), and `sku_l04_4` reads the rear label with
+ やまや garbled to まや, scoring 0.379 - below the accept line. Abstaining on
+ a weak read is the designed outcome.
+
+`sku_l07_2` accepts with a negative local score (-0.55) on text evidence alone.
+That is the lane doing its job, but it is worth naming: the accept rests on two
+matched tokens (manufacturer + size), not on geometry.
+
+## What is still missing
+
+No external source gives per-SKU identity for the whole catalog, and no
+reusable clip combines the target category with shelf-distance text
+resolution. The Tier-2 and Tier-3 gates in DECISION.md still need the
+operator's own recorded walks.
diff --git a/recognization/data/external-eval/kewpie/_cand/_final_l01.jpg b/recognization/data/external-eval/kewpie/_cand/_final_l01.jpg
new file mode 100644
index 0000000..83bea33
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_final_l01.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_final_l02.jpg b/recognization/data/external-eval/kewpie/_cand/_final_l02.jpg
new file mode 100644
index 0000000..5901330
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_final_l02.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_final_l03.jpg b/recognization/data/external-eval/kewpie/_cand/_final_l03.jpg
new file mode 100644
index 0000000..52b35eb
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_final_l03.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_final_l05.jpg b/recognization/data/external-eval/kewpie/_cand/_final_l05.jpg
new file mode 100644
index 0000000..7004c1a
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_final_l05.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_final_l06.jpg b/recognization/data/external-eval/kewpie/_cand/_final_l06.jpg
new file mode 100644
index 0000000..8692b45
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_final_l06.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_final_l11.jpg b/recognization/data/external-eval/kewpie/_cand/_final_l11.jpg
new file mode 100644
index 0000000..500f7ec
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_final_l11.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_pp_l01.jpg b/recognization/data/external-eval/kewpie/_cand/_pp_l01.jpg
new file mode 100644
index 0000000..bf0d9a4
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_pp_l01.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_pp_l02.jpg b/recognization/data/external-eval/kewpie/_cand/_pp_l02.jpg
new file mode 100644
index 0000000..2ecfe16
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_pp_l02.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_pp_l03.jpg b/recognization/data/external-eval/kewpie/_cand/_pp_l03.jpg
new file mode 100644
index 0000000..f18686c
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_pp_l03.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_pp_l11.jpg b/recognization/data/external-eval/kewpie/_cand/_pp_l11.jpg
new file mode 100644
index 0000000..6b6f5ea
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_pp_l11.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_sheet_amazon_l01_l03.jpg b/recognization/data/external-eval/kewpie/_cand/_sheet_amazon_l01_l03.jpg
new file mode 100644
index 0000000..f309bf3
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_sheet_amazon_l01_l03.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_sheet_amazon_l05_l11.jpg b/recognization/data/external-eval/kewpie/_cand/_sheet_amazon_l05_l11.jpg
new file mode 100644
index 0000000..9e9b306
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_sheet_amazon_l05_l11.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_sheet_bundles.jpg b/recognization/data/external-eval/kewpie/_cand/_sheet_bundles.jpg
new file mode 100644
index 0000000..2f2c77d
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_sheet_bundles.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_sheet_enroll_vs_yahoo.jpg b/recognization/data/external-eval/kewpie/_cand/_sheet_enroll_vs_yahoo.jpg
new file mode 100644
index 0000000..d8dbae9
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_sheet_enroll_vs_yahoo.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_sheet_yahoo_gallery.jpg b/recognization/data/external-eval/kewpie/_cand/_sheet_yahoo_gallery.jpg
new file mode 100644
index 0000000..14389ea
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_sheet_yahoo_gallery.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l01_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l01_amz2.jpg
new file mode 100644
index 0000000..eef7d23
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l01_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l01_amz3.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l01_amz3.jpg
new file mode 100644
index 0000000..1152cb4
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l01_amz3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l02_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l02_amz2.jpg
new file mode 100644
index 0000000..75a2346
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l02_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l02_b1.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l02_b1.jpg
new file mode 100644
index 0000000..2bac721
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l02_b1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l03_amz4.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l03_amz4.jpg
new file mode 100644
index 0000000..9fb11cb
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l03_amz4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l03_amz6.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l03_amz6.jpg
new file mode 100644
index 0000000..4d87b80
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l03_amz6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l05_amz3.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l05_amz3.jpg
new file mode 100644
index 0000000..aaa15eb
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l05_amz3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l05_amz6.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l05_amz6.jpg
new file mode 100644
index 0000000..eecb7dd
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l05_amz6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l06_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l06_amz1.jpg
new file mode 100644
index 0000000..772324b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l06_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l06_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l06_yahoo1.jpg
new file mode 100644
index 0000000..25ab5c7
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l06_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l11_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l11_amz2.jpg
new file mode 100644
index 0000000..23ee5f9
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l11_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/_zoom_l11_y1.jpg b/recognization/data/external-eval/kewpie/_cand/_zoom_l11_y1.jpg
new file mode 100644
index 0000000..18edf59
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/_zoom_l11_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz1.jpg
new file mode 100644
index 0000000..ecb63c6
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz2.jpg
new file mode 100644
index 0000000..d37da1e
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz3.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz3.jpg
new file mode 100644
index 0000000..a868932
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz4.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz4.jpg
new file mode 100644
index 0000000..95e7f5b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz5.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz5.jpg
new file mode 100644
index 0000000..892ed07
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz5.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz6.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz6.jpg
new file mode 100644
index 0000000..a43f26b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz7.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz7.jpg
new file mode 100644
index 0000000..dcaabfc
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz7.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_amz8.jpg b/recognization/data/external-eval/kewpie/_cand/l01_amz8.jpg
new file mode 100644
index 0000000..9609bb7
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_amz8.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_b1.jpg b/recognization/data/external-eval/kewpie/_cand/l01_b1.jpg
new file mode 100644
index 0000000..ebea0b2
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_b1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_pp1.jpg b/recognization/data/external-eval/kewpie/_cand/l01_pp1.jpg
new file mode 100644
index 0000000..97fc860
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_pp1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_pp2.jpg b/recognization/data/external-eval/kewpie/_cand/l01_pp2.jpg
new file mode 100644
index 0000000..88cdbaf
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_pp2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_pp3.jpg b/recognization/data/external-eval/kewpie/_cand/l01_pp3.jpg
new file mode 100644
index 0000000..c8f9cae
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_pp3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_pp4.jpg b/recognization/data/external-eval/kewpie/_cand/l01_pp4.jpg
new file mode 100644
index 0000000..8f55723
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_pp4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_pp5.jpg b/recognization/data/external-eval/kewpie/_cand/l01_pp5.jpg
new file mode 100644
index 0000000..795c67c
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_pp5.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_pp6.jpg b/recognization/data/external-eval/kewpie/_cand/l01_pp6.jpg
new file mode 100644
index 0000000..bb819bf
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_pp6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_y1.jpg b/recognization/data/external-eval/kewpie/_cand/l01_y1.jpg
new file mode 100644
index 0000000..3ba703e
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_y2.jpg b/recognization/data/external-eval/kewpie/_cand/l01_y2.jpg
new file mode 100644
index 0000000..3f37987
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_y2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l01_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/l01_yahoo1.jpg
new file mode 100644
index 0000000..192caaf
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l01_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/l02_amz1.jpg
new file mode 100644
index 0000000..40bad42
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/l02_amz2.jpg
new file mode 100644
index 0000000..4eac71b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_b1.jpg b/recognization/data/external-eval/kewpie/_cand/l02_b1.jpg
new file mode 100644
index 0000000..51e2e77
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_b1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_b2.jpg b/recognization/data/external-eval/kewpie/_cand/l02_b2.jpg
new file mode 100644
index 0000000..6fabab1
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_b2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_pp1.jpg b/recognization/data/external-eval/kewpie/_cand/l02_pp1.jpg
new file mode 100644
index 0000000..5f22f54
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_pp1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_pp2.jpg b/recognization/data/external-eval/kewpie/_cand/l02_pp2.jpg
new file mode 100644
index 0000000..a870f03
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_pp2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_y1.jpg b/recognization/data/external-eval/kewpie/_cand/l02_y1.jpg
new file mode 100644
index 0000000..7796858
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_y2.jpg b/recognization/data/external-eval/kewpie/_cand/l02_y2.jpg
new file mode 100644
index 0000000..3f37987
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_y2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l02_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/l02_yahoo1.jpg
new file mode 100644
index 0000000..63020cd
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l02_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz1.jpg
new file mode 100644
index 0000000..a6a0899
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz2.jpg
new file mode 100644
index 0000000..6795334
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz3.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz3.jpg
new file mode 100644
index 0000000..f9094eb
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz4.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz4.jpg
new file mode 100644
index 0000000..e753989
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz5.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz5.jpg
new file mode 100644
index 0000000..fb6e87d
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz5.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz6.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz6.jpg
new file mode 100644
index 0000000..ece3a1a
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_amz7.jpg b/recognization/data/external-eval/kewpie/_cand/l03_amz7.jpg
new file mode 100644
index 0000000..08a36a9
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_amz7.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_b1.jpg b/recognization/data/external-eval/kewpie/_cand/l03_b1.jpg
new file mode 100644
index 0000000..97c1fc6
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_b1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_pp1.jpg b/recognization/data/external-eval/kewpie/_cand/l03_pp1.jpg
new file mode 100644
index 0000000..33e67d5
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_pp1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_pp2.jpg b/recognization/data/external-eval/kewpie/_cand/l03_pp2.jpg
new file mode 100644
index 0000000..5ed5755
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_pp2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_pp3.jpg b/recognization/data/external-eval/kewpie/_cand/l03_pp3.jpg
new file mode 100644
index 0000000..c50febd
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_pp3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_pp4.jpg b/recognization/data/external-eval/kewpie/_cand/l03_pp4.jpg
new file mode 100644
index 0000000..0852ef4
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_pp4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_y1.jpg b/recognization/data/external-eval/kewpie/_cand/l03_y1.jpg
new file mode 100644
index 0000000..b90e05c
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_y2.jpg b/recognization/data/external-eval/kewpie/_cand/l03_y2.jpg
new file mode 100644
index 0000000..97c1fc6
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_y2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_y3.jpg b/recognization/data/external-eval/kewpie/_cand/l03_y3.jpg
new file mode 100644
index 0000000..5173fa0
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_y3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l03_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/l03_yahoo1.jpg
new file mode 100644
index 0000000..7e95723
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l03_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz1.jpg
new file mode 100644
index 0000000..5506c52
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz2.jpg
new file mode 100644
index 0000000..2186f6e
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz3.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz3.jpg
new file mode 100644
index 0000000..301fdd7
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz4.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz4.jpg
new file mode 100644
index 0000000..d9ec5a7
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz5.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz5.jpg
new file mode 100644
index 0000000..558c220
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz5.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz6.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz6.jpg
new file mode 100644
index 0000000..0309e39
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_amz7.jpg b/recognization/data/external-eval/kewpie/_cand/l05_amz7.jpg
new file mode 100644
index 0000000..73df382
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_amz7.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_b1.jpg b/recognization/data/external-eval/kewpie/_cand/l05_b1.jpg
new file mode 100644
index 0000000..16b57a9
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_b1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_b2.jpg b/recognization/data/external-eval/kewpie/_cand/l05_b2.jpg
new file mode 100644
index 0000000..fe8ed26
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_b2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_y1.jpg b/recognization/data/external-eval/kewpie/_cand/l05_y1.jpg
new file mode 100644
index 0000000..1fd2568
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_y2.jpg b/recognization/data/external-eval/kewpie/_cand/l05_y2.jpg
new file mode 100644
index 0000000..3f37987
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_y2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l05_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/l05_yahoo1.jpg
new file mode 100644
index 0000000..fd8a76f
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l05_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/l06_amz1.jpg
new file mode 100644
index 0000000..0a47b3a
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_pp1.jpg b/recognization/data/external-eval/kewpie/_cand/l06_pp1.jpg
new file mode 100644
index 0000000..c287c61
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_pp1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_pp2.jpg b/recognization/data/external-eval/kewpie/_cand/l06_pp2.jpg
new file mode 100644
index 0000000..d0410d8
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_pp2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_pp3.jpg b/recognization/data/external-eval/kewpie/_cand/l06_pp3.jpg
new file mode 100644
index 0000000..4f177d2
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_pp3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_ppb1.jpg b/recognization/data/external-eval/kewpie/_cand/l06_ppb1.jpg
new file mode 100644
index 0000000..95b92ce
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_ppb1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_ppb2.jpg b/recognization/data/external-eval/kewpie/_cand/l06_ppb2.jpg
new file mode 100644
index 0000000..ce2a1e6
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_ppb2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_ppb3.jpg b/recognization/data/external-eval/kewpie/_cand/l06_ppb3.jpg
new file mode 100644
index 0000000..258686e
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_ppb3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y1.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y1.jpg
new file mode 100644
index 0000000..4e88743
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y2.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y2.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y3.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y3.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y4.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y4.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y4.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y5.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y5.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y5.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y6.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y6.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y6.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y7.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y7.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y7.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_y8.jpg b/recognization/data/external-eval/kewpie/_cand/l06_y8.jpg
new file mode 100644
index 0000000..1ec302b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_y8.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l06_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/l06_yahoo1.jpg
new file mode 100644
index 0000000..2053ec5
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l06_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_amz1.jpg b/recognization/data/external-eval/kewpie/_cand/l11_amz1.jpg
new file mode 100644
index 0000000..4126d14
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_amz1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_amz2.jpg b/recognization/data/external-eval/kewpie/_cand/l11_amz2.jpg
new file mode 100644
index 0000000..d2fe0bd
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_amz2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_b1.jpg b/recognization/data/external-eval/kewpie/_cand/l11_b1.jpg
new file mode 100644
index 0000000..ea8d42f
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_b1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_b2.jpg b/recognization/data/external-eval/kewpie/_cand/l11_b2.jpg
new file mode 100644
index 0000000..63918b0
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_b2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_pp1.jpg b/recognization/data/external-eval/kewpie/_cand/l11_pp1.jpg
new file mode 100644
index 0000000..a8d3685
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_pp1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_pp2.jpg b/recognization/data/external-eval/kewpie/_cand/l11_pp2.jpg
new file mode 100644
index 0000000..87d9d7b
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_pp2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_y1.jpg b/recognization/data/external-eval/kewpie/_cand/l11_y1.jpg
new file mode 100644
index 0000000..b8a8bdc
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_y1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_y2.jpg b/recognization/data/external-eval/kewpie/_cand/l11_y2.jpg
new file mode 100644
index 0000000..98e4a94
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_y2.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_y3.jpg b/recognization/data/external-eval/kewpie/_cand/l11_y3.jpg
new file mode 100644
index 0000000..15cd3d3
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_y3.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_cand/l11_yahoo1.jpg b/recognization/data/external-eval/kewpie/_cand/l11_yahoo1.jpg
new file mode 100644
index 0000000..f355320
Binary files /dev/null and b/recognization/data/external-eval/kewpie/_cand/l11_yahoo1.jpg differ
diff --git a/recognization/data/external-eval/kewpie/_commons.py b/recognization/data/external-eval/kewpie/_commons.py
new file mode 100644
index 0000000..0782602
--- /dev/null
+++ b/recognization/data/external-eval/kewpie/_commons.py
@@ -0,0 +1,37 @@
+"""Wikimedia Commons search helper for the kewpie external-proxy collection."""
+import json
+import sys
+import urllib.parse
+
+import _fetch
+
+
+def csearch(q, limit=30):
+ u = (
+ "https://commons.wikimedia.org/w/api.php?action=query&generator=search"
+ f"&gsrsearch={urllib.parse.quote(q)}&gsrnamespace=6&gsrlimit={limit}"
+ "&prop=imageinfo&iiprop=url|size|extmetadata&format=json"
+ )
+ d = json.loads(_fetch.text(u))
+ out = []
+ for p in d.get("query", {}).get("pages", {}).values():
+ ii = (p.get("imageinfo") or [{}])[0]
+ em = ii.get("extmetadata", {})
+ out.append(
+ (
+ p["title"],
+ ii.get("width"),
+ ii.get("height"),
+ em.get("LicenseShortName", {}).get("value"),
+ em.get("Artist", {}).get("value", "")[:60],
+ ii.get("url"),
+ )
+ )
+ return out
+
+
+if __name__ == "__main__":
+ for q in sys.argv[1:]:
+ print("###", q)
+ for t in csearch(q):
+ print(" ", t[0], "|", t[1], "x", t[2], "|", t[3], "|", t[4])
diff --git a/recognization/data/external-eval/kewpie/_fetch.py b/recognization/data/external-eval/kewpie/_fetch.py
new file mode 100644
index 0000000..e0f2867
--- /dev/null
+++ b/recognization/data/external-eval/kewpie/_fetch.py
@@ -0,0 +1,127 @@
+"""Fetch helper for the kewpie external-proxy collection.
+
+Kept in the owned directory so every download is reproducible from the
+manifest's source_page. Not part of the product code.
+"""
+import gzip
+import json
+import re
+import ssl
+import sys
+import urllib.parse
+import urllib.request
+
+try:
+ import certifi
+
+ _CTX = ssl.create_default_context(cafile=certifi.where())
+except ImportError: # pragma: no cover - certifi ships with this repo's venv
+ _CTX = ssl.create_default_context()
+
+UA = (
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
+ "(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
+)
+
+
+def get(url, referer=None, lang="ja,en-US;q=0.9,en;q=0.8"):
+ req = urllib.request.Request(url)
+ req.add_header("User-Agent", UA)
+ req.add_header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
+ req.add_header("Accept-Language", lang)
+ req.add_header("Accept-Encoding", "gzip, deflate")
+ if referer:
+ req.add_header("Referer", referer)
+ with urllib.request.urlopen(req, timeout=40, context=_CTX) as r:
+ raw = r.read()
+ if r.headers.get("Content-Encoding") == "gzip":
+ raw = gzip.decompress(raw)
+ return raw, r.headers.get("Content-Type", "")
+
+
+def text(url, **kw):
+ raw, ctype = get(url, **kw)
+ for enc in ("utf-8", "shift_jis", "euc-jp"):
+ try:
+ return raw.decode(enc)
+ except UnicodeDecodeError:
+ continue
+ return raw.decode("utf-8", "replace")
+
+
+def download(url, path, referer=None):
+ raw, ctype = get(url, referer=referer)
+ with open(path, "wb") as f:
+ f.write(raw)
+ return len(raw), ctype
+
+
+def amazon_search(query, limit=20):
+ """Return [(asin, title)] from an amazon.co.jp search."""
+ h = text("https://www.amazon.co.jp/s?k=" + urllib.parse.quote(query))
+ out = []
+ for block in re.split(r'(?=
]*data-asin="[A-Z0-9]{10}")', h):
+ m = re.match(r'
]*data-asin="([A-Z0-9]{10})"', block)
+ if not m:
+ continue
+ asin = m.group(1)
+ t = re.search(r'
\ No newline at end of file
diff --git a/recognization/data/external-eval/l12-reconciliation/source-pages/euras-official-home.html b/recognization/data/external-eval/l12-reconciliation/source-pages/euras-official-home.html
new file mode 100644
index 0000000..5a1eef4
--- /dev/null
+++ b/recognization/data/external-eval/l12-reconciliation/source-pages/euras-official-home.html
@@ -0,0 +1,28 @@
+株式会社ユーラス | 食料品の海外商品調達、国内PB商品開発
\ No newline at end of file
diff --git a/recognization/data/external-eval/l12-reconciliation/source-pages/euras-official-jan-example.html b/recognization/data/external-eval/l12-reconciliation/source-pages/euras-official-jan-example.html
new file mode 100644
index 0000000..369c11a
--- /dev/null
+++ b/recognization/data/external-eval/l12-reconciliation/source-pages/euras-official-jan-example.html
@@ -0,0 +1,20 @@
+商品詳細: なんでもかける胡麻にんにく | 株式会社ユーラス
+ コメント
++ コメント一覧 (1件) +
++-
+
+
+
+
+
+
+
+
+
+[…] 詳しくはこちらをご覧ください。 […]
+