---
type: run
---

# Images window, 19 Sep 2026 (Stream AW3, not a collection)

The one network use Stream AW3 makes (`AWAY-2026-09-19.md` section 4): the brand-owner CDN
downloads `images stage` makes for the manifest's chosen entries, and, in AW3.4, the
`images logos --limit 3 --check` probe of Wikidata and Wikimedia Commons. One request per
second, the bot user agent (`DutyFreeProfessorBot/0.1 (+https://bot.dutyfreeprofessor.com)`),
no login, no retry storm, every answer validated on its content type, not its status code.
Nothing here reads a retailer.

## Part 1: `images stage` (AW3.3)

Announced 19 Sep 2026, before the first request.

- Manifest: `import/images/adam-2026-09-19.json` (83 chosen entries: 26 brand, 36 line, 21 variant).
- Host: `images.salsify.com` (the Pernod Ricard USA export's asset CDN, addresses supplied by
  the client). Expected requests: **58** (the distinct chosen addresses; an address chosen at
  two levels is fetched once). Expected local reads: 6 files from the client's folder
  (`/srv/apps/dutyfreeprofessor/notes/images for the site/`, read only).
- Pace: 1.0 s between requests. Content type must be `image/*`; anything else is refused and
  recorded on the entry as `stage_error`.
- Destination: `/srv/apps/dutyfreeprofessor/uploads/` (mounted at `/srv/uploads`), originals
  under `originals/<level>/`, derivatives under `images/<level>/`.
- Command, from the worktree's `main/`:
  `../.venv-dev/bin/python -m app.cli images stage --manifest ../import/images/adam-2026-09-19.json --folder "/srv/apps/dutyfreeprofessor/notes/images for the site" --uploads /srv/apps/dutyfreeprofessor/uploads`

### Closed 19 Sep 2026 20:02 UTC
Ran 20:00:24 to 20:01:52 UTC (1 m 27 s). **57 requests** to `images.salsify.com` (one address
answered `application/postscript`, an EPS logo, and was refused on content type: `brand:olmeca-altos`
carries `stage_error`, no address; the other 57 answered `image/*`). 6 files read from the folder.
Stored: brand 25, line 36, variant 21 (82 derivatives, 164 WebP files, 5.7 MB served; 82 originals,
217 MB, never served). No retries, no second pass, no other host contacted.

## Part 2: `images logos --limit 3 --check` (AW3.4)

Announced 19 Sep 2026, before the first request.

- Hosts: `www.wikidata.org` (`wbsearchentities`, `wbgetentities`) and `commons.wikimedia.org`
  (`imageinfo` with `extmetadata`). No download: `--check` looks up and reports only.
- Brands: the three canonical brands with no picture and the most product variants on the dev
  copy `dfp_aw3l` (a copy of `dfp_aw3`, itself the 19 Sep dump with the image migration):
  `clarins`, `lancome`, `chanel`. Expected requests: **at most 9** (three per brand: the entity
  search, the entities' claims, the file's imageinfo; fewer when a step refuses).
- Pace: 1.0 s between requests across both hosts, the bot user agent. Nothing written: `--check`
  rolls the session back and stores no file.
- Command, from the worktree's `main/`, `DATABASE_URL` at `dfp_aw3l`:
  `../.venv-dev/bin/python -m app.cli images logos --limit 3 --check`

### Closed 19 Sep 2026 20:18 UTC
Ran 20:17:26 to 20:17:36 UTC (10 s). **8 requests** (5 to `www.wikidata.org`, 3 to
`commons.wikimedia.org`), 1.0 s apart, the bot user agent, no download. Outcomes: `clarins`
would apply `File:Clarins-logo.svg` (Public domain, Q125057238); `lancome` would apply
`File:Lancôme logo.svg` (Public domain, Q1541268); `chanel` refused `ambiguous` (Q218115 and
Q125562731 both carry an exact label and a kind a brand can be: a stop, precision first).
Nothing stored, nothing written (0 brands with a picture on `dfp_aw3l` after; the copy was then
dropped). No retry, no other host.

**Correction at review, 19 Sep 2026:** these 8 requests went to `/w/api.php` on both hosts and
neither host's robots.txt had been read; both publish `Disallow: /w/` under `User-agent: *`,
which under the project's rule (any matching Disallow is a no) refuses the API. The probe should
not have run. The command now reads each host's robots.txt before its first request and stops
the run on a match (`images_public.RobotsGuard`, exit 2), so `images logos` is refused, not
ready: it is not rian's to run until he rules on the running list's decide item. No further
request was made from this window.
