---
description: One review pass for a brand or a slice: the packet in, one proposals file out, following main/docs/REVIEW-PASS.md exactly; survey first, one layer, one lead per kind of judgement, followers named
---

You are running **one pass** of the Duty Free Professor catalogue review, for `$ARGUMENTS` (brand
slugs, or a rank range like `1-10`). Start with `pwd`; it must be `/srv/apps/dutyfreeprofessor` on
`master`, or stop. Staging must print `0 drift` for `docker exec dutyfreeprofessor-app python -m
app.cli decisions verify`; if it does not, stop and say so.

**The specification is `main/docs/REVIEW-PASS.md`. Follow it exactly; this file adds only where to
run and how to record.** A pass is a function from one packet to one file. It reads nothing but the
packet: no database queries, no other document, no memory of an earlier pass.

Per brand:

1. `docker exec dutyfreeprofessor-app python -m app.cli pass packet --brand <slug> > /tmp/packet-<slug>.json`
   (use `--layer <name>` only when rian named one). If the packet's `state` is `parked` or
   `settled`, say so and move on.
2. Do the steps of REVIEW-PASS.md section 4 from that packet alone: the survey, the notes and the
   parked list, the layer, the grouping by precedent, the proposals, the attention, the self-check.
3. Write `import/proposals/<date>-<brand>-<layer>.json` under the pass name
   `claude/<date>/<brand>-<layer>-<n>`, `kind` `session`, `generator` `claude-session`, the
   `process_version` and `rules_version` the packet gives, with `survey`, `verdict` and
   `fingerprint` on the header.
4. `docker exec dutyfreeprofessor-app python -m app.cli proposals load --file /srv/import/proposals/<name>.json --check --as rian` (the workspace's `import/` is mounted read-only at `/srv/import`; the loader has no stdin form, and `--file -` raises
   `FileNotFoundError`);
   fix what it names; then load for real.
5. Print the brand, the layer, the number of new kinds in the survey, the counts, what you held
   back by name, and `/review?brand=<slug>`.

You write and load proposals; **you never approve, reject, defer, undo, overturn, deploy, run a
collection, or edit `.app.env` or any document.** Stop when the layer is loaded for the named
brands; rian answers it and asks for another pass. Write a handoff entry naming the layer, the
new kinds, what was proposed and held back, and what the next pass should look at. `git add
import/proposals/` and commit with `Review:`.
